Django MTV simple_tag filter inclusion_tag
Django框架
模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
MVC 框架 -- Model -View -Controller
MTV 框架 -- Model(模型)-Template(模板)-View(视图)
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
Django模板记两种特殊符号: {{ 变量 } } 和 {% 逻辑相关的操作 %}
{{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作。
{{ 变量名 }} 变量名由字母数字下划线组成, 点( . )在模板语言中有特殊的含义,用来获取对象的相应属性值.
1 变量 -- render(request,'模板文件名',{ k1:v1 })
{{k1}} {{ list.0 }} {{ dict.key }} {{ dict.keys }} {{ dict.values }}
. 列表 索引
. 字典 键 keys values items
模板系统遇见一个点时:会按照下面顺序去查询:(优先级) -/- 1 在字典中 2属性或方法 3数字索引
2 过滤器 -- {{ value|filter }} {{ value|filter:参数 }}
filters--过滤器 -- 修改变量的显示结果 {{ value|filter_name:参数 }} 参数最多一个
default 默认 -- 'string_if_invalid':'找不到', 无效字符串
filesizeformat -- 文件大小个格式化 显示效果 最小byte
add -- 数字相加 列表拼接 字符串相加
length -- 返回value的长度
slice -- 切片 步长 方向
{{ str|truncatechars:9}}-- 截断 --
date 格式化 import datetime -- 时间{{ now|date:'Y-m-d H:i:s'}} --规定
{{ now }} settings -> DATETIME_FORMAT = 'Y-m-d H:i:s' USE_L10N = False (当前时间正常显示)
-------------------------------------------------------------------------------------------
safe (安全) --不做转义 csrf跨站脚本攻击 Django默认做转义
{{ a_html|safe }} {{ js|safe }} --> 告诉Django不做转义,可以实现效果
不支持 连续判断/数学运算 10>5>1 js//10>5>1 --> false 10>5==1 --> true
with -- 变量重新赋值
3 tags 标签
{% %} //
{% for i in list %} #for循环
{{ forloop }} # counter last first等操作
{{ i }}
{% endfor %}
-------------------
{% for i in list %}
{{ i }}
{% empty %}
空空如也
{% endfor %}
------------------
{% if 条件 %}
{% elif 条件%}
{% else %}
{% endif %}
------------------
注意:不支持连续判断
不支持算数运算 + - * /
--------------------------------------------------
母版--减少代码 公用的部分放进去
分两步:
1 定义母版 base.html 提取公共部分,页面中定义block块(占位),让子页面进行替换 .
2 子页面 继承母版 {% extends '母版文件名' %} 写在第一行 /重写block块
注意: {% extends 'base.html' %} / 要修改的内容写在block块中 /多写点block块 css-js
母版文件名加引号 模板中写多个block 预留css js 样式位置
--------------组件 一小段写死的html代码--------------
使用 {% include '组件.html' %}
csrf_token ---/CSRF(Cross-site request forgery)跨站请求伪造
{% csrf_token %} --> form表单中
装饰器 -- 在不改变原函数的代号和调用方法的基础上,给原函数额外增加功能。
**** 以下是3种自定义的方法 ****
-- 在app 文件夹下创建 一个名为 templatetags 的 python package包,包中创建my_tags.py文档
-- 以下为my_tags.py 中的代码内容 --
from django import template
register = template.Library() # register固定的写法
# 写函数
def add_sb(value, arg):
return '{}_{}_sb'.format(value, arg) @register.filter # 函数加装饰器
def add_sb(value, arg): # 最多两个参数
print(value, arg)
return '{}_{}_sb'.format(value, arg) @register.simple_tag
def str_join(*args, **kwargs): # 可接受多个参数
print(args)
print(kwargs)
return "-".join(args) + '*'.join(kwargs.values()) @register.inclusion_tag('li.html') #动态代码段
def show_li(num):
return {'num': range(num)} -------------- 以下是在 html 文档中使用 --------------
{% load my_tags%} # 加载自定义标签
{{ 'zc'|add_sb:'very'}} {% if 'alex'|add_sb:'big' == 'alex_big_sb' %}
zhen
{% endif %}
-- -- -- -- 以下 simple_tag (接收多个参数) -- -- -- -- -- --
{% load my_tags %}
{% str_join 'k1' 'k2' 'k3' k1='v1' k2='v2' %}
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
写模板 li.html
<ul>
{% for foo in num %}
<li> {{ foo }}</li>
{% endfor %}
</ul>
-- 以下这两行代码要写在渲染页面上 inclusion_tag --
{% load my_tags %}
{% show_li 10 %}
静态文件相关
-- -- 在母版 base.html 页面 -- -- --
{% load static %}
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7/css/bootstrap.css' %}">
<link rel="stylesheet" href="{% static 'css/dsb.css' %}"> -- -- -- 下面是获取静态文件的别名 -- -- --
{% get_static_prefix %}
Django MTV simple_tag filter inclusion_tag的更多相关文章
- Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag
Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...
- Django中通过filter和simple_tag为前端实现自定义函数
Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些 ...
- Django中利用filter与simple_tag为前端自定义函数的实现方法
转自:http://www.jb51.net/article/116303.htm 前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅 ...
- python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag
一.昨日内容回顾 1.MVC和MTV框架 MVC: model 模型 存写数据 view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型 OR ...
- 初识DJango——MTV模型
一.Django—MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻 ...
- Django - Xadmin (四) Filter
Django - Xadmin (四) Filter Filter 功能描述 与 admin 组件中 Filter 功能类似,在展示页面右侧放置一列标签,通过点击这些标签来筛选出该标签相关的数据. 比 ...
- python 之 Django框架(模板系统、过滤器、simple_tag、inclusion_tag、Tags、母版、组件)
12.35 Django模板系统 {{ }}和 {% %},变量相关的用{{}},逻辑相关的用{%%} app02/views: # 模板语言测试函数 def template_test(reques ...
- Python - Django - simple_tag 和 inclusion_tag
simple_tag: simple_tag 和自定义 filter 类似,但可以接收更多更灵活的参数 在 app01/templatetags/ 目录下创建 mysimple_tag.py mysi ...
- django自定义simple_tag和filter
1.自定义simple_tag: 1).在app目录名下创建templatetags目录,并新建__init__.py文件. 2).在templatetags目录下创建任意名字的py文件,例如rema ...
随机推荐
- css自动换行如何设置?url太长会撑开页面
我们更新文章时如果有引用其他文章一般会带一个原文url,但这个链接如果太长的话会把内容的版块撑开,整个排版乱了.那我们能不能设置css自动换行呢?如下图所示,其实只要两个样式就能搞定 word-wra ...
- 报错解决——-bash: wget: command not found
本人用的是Mac本,在Mac中install的时候经常会用到wget,但是事先没有安装wget的话就会报上面的错误,解决方法就是安装wget. 安装wget 方法一:用传统的安装包方式安装 A - 从 ...
- sql server 跟踪日志
1,当SQL Server错误日志很大时,手工运行: exec sp_cycle_errorlog 系统存储过程,即可使用新的日志文件 sqlserver系统自动调用 exec sp_cycle_e ...
- [django]模板中自定义变量&django模板中的变量
django自定义模板变量 context_processors.py def mysetings(request): return { 'NAME': 'maotai' } settings.py ...
- BI-LSTM and CRF using Keras
问题1:CUDA_ERROR_OUT_OF_MEMORY: How to activate multiple GPUs from Keras in Tensorflow import keras.ba ...
- js模拟链表
链表: 每个元素,都有一个指针,指向下一个元素 //链表 function LinkedList(){ var head = null; length = 0; this.append = funct ...
- 笔记本(ThinkPad)怎样关闭触摸板
随着笔记本电脑的普及,人们越来越习惯于出门使用笔记本,笔记本的便捷高效也大幅度地提升了人们的工作效率.但是如果居家使用笔记本电脑,也有其不便之处.比如在键盘上打字,很容易就会喷到触摸板,以至于光标一下 ...
- Python字典和集合的内部实现
1. 哈希表(Hash tables) 在Python中,字典是通过哈希表实现的.也就是说,字典是一个数组,而数组的索引是经过哈希函数处理后得到的.哈希函数的目的是使键均匀地分布在数组中.由于不同的键 ...
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。
将项目部署到服务器后发现有如下问题,查了网上好多说是需要被序列化的类没有写上[Serializable]标志,所以把全部需要序列化的列都写上了标志发现还是不是,最后查到了发现网上说的并不太准确,而是需 ...
- 查看手机cpu信息
adb shell getprop ro.product.cpu.abi