1 模板:
什么是模板?
html+模板语法
模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
2 模板语法:
1 变量:{{}}
深度查询: 通过句点符号 . 过滤器 filter {{var|filter_name}}
2 标签: {% tag %}
for if else
for标签
遍历每一个元素:
{% for person in person_list %} <p>{{ person.name }}</p> {% endfor %}
可以利用{% for obj in list reversed %}反向完成循环。
遍历一个字典:
{% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %}
for ... empty
for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
if 标签
{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if num > 100 or num < 0 %} <p>无效</p> {% elif num > 80 and num < 100 %} <p>优秀</p> {% else %} <p>凑活吧</p> {% endif %}
with
使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
例如:
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
csrf_token
这个标签用于跨站请求伪造保护
3 自定义过滤器和标签
步骤: 1 在settings中的INSTALLED_APPS,是否有当前应用 2 在应用中创建一个templatetags 3 在templatetags中创建py文件:mytag.py 4 在mytag.py中: 引入: from django import template from django.utils.safestring import mark_safe register = template.Library() #register的名字是固定的,不可改变 5 定义过滤器和标签 @register.filter def multi(x,y): return x*y @register.simple_tag def multiTag(x,y,z): return x*y*z 6 在引用模板中导入:{% load myTag %} 7 调用: 过滤器: {{var|filter_name:参数}} # 参数只能是一个 标签: {% simple_tag 参数1 参数2 ... %}
对比过滤器与自定义标签的使用:
过滤器函数的参数只能有两个,自定义标签无参数限制
过滤器可以与逻辑标签共同使用,比如if标签。自定义标签不可以。