1变量
2 标签 { % 代码块 % }
3 过滤器
4 注释{# 代码或 html #}
1变量
语法:
{{ variable }}
当模版引擎遇到一个变量,将计算这个变量,然后将结果输出
变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
当模版引擎遇到点("."),会按照下列顺序查询:
字典查询,例如:foo["bar"]
属性或方法查询,例如:foo.bar
数字索引查询 ,例如:foo[bar]
如果变量不存在, 模版系统将插入'' (空字符串)
在模板中调用对象的方法
在模板中调用方法时不能传递参数
在 models.py 中定义类 HeroInfo
from django.db import models
class HeroInfo(models.Model):
...
def showName(self):
return self.hname
在 views.py 中传递 HeroInfo 对象
from django.shortcuts import render
from models import *
def callMethodInTemplate(request):
hero = HeroInfo(hname='abc')
context = {'hero': hero}
return render(request, 'booktest/detail2.html', context)
应用 urlcof 中添加:
url(r'^callMethodInTemplate/$', views.callMethodInTemplate),
在模板 detail2.html 中调用
{{hero.showName}}
标签
语法:{ % tag % }
for 标签
循环逻辑:{%for ... in ...%}
注意:
1、%和{}中间没有空格 { % % }写法是不对的
2、Django 不支持退出循环操作。 如果想退出,可以让迭代变量仅包含需要迭代的项目。
3、Django 也不支持 continue 语句,我们无法让当前迭代操作跳回到循环头部。
语法:
{{forloop.counter}}
表示当前是第几次循环
{%empty%}
给出的列表空为或列表不存在时,执行此处
{%endfor%}
范例
{%for item in heroList%}
{{ forloop.counter }}: {{ item.showName }}
当前是第{{forloop.counter}}次循环
{%empty%}
给出的列表为或列表不存在时,执行此处
{%endfor%}
reversed 标签:使得该列表被反向迭代
{%for item in heroList% reversed %}
if 标签
{%if ...%}
逻辑 1
{%elif ...%}
逻辑 2
{%else%}
逻辑 3
{%endif%}
范例
{%if hero.showName == '黄蓉'%}
黄蓉
{%else%}
其他英雄
{%endif%}
注意:
hero.showName == 之间一定要有空格!
如果连在一起写 hero.showName== ,程序会将它们看成了一个整体而报错:
Could not parse the remainder: '=='1'' from 'sort=='1''
注释标签
多行注释
{ % comment % }
多行注释
{ % endcomment % }
范例
{% comment %}
This is a
multi-line comment.
{% endcomment %}
单行注释
{# 这是一个注释 #}
范例
This is a {# this is nota comment #}test.
include 标签
加载模板并以标签内的参数渲染
{ %include "foo/bar.html" % }
url 标签
反向生成 url
{ % url 'name' p1 p2 %}
范例
{{ book.btitle }}
csrf_token
这个标签用于跨站请求伪造保护
{ % csrf_token %}
布尔标签
and、or ,and 比 or 的优先级高
其它标签
block、extends :详见 “模板继承”
autoescape :详见 “HTML转义”
过滤器
语法
{ { 变量 |过滤器 }}
例如{ { name|lower }} ,表示将变量 name 的值变为小写输出
管道符号|
应用于过滤器 ,通过使用过滤器来改变变量的计算结果
范例
在 if 标签中使用过滤器结合运算符
if list1|length > 1
过滤器链
过滤器能够被 “串联” ,构成过滤器链
name|lower|upper
过滤器参数传递
参数使用引号包起来
list|join:", "
设置默认值
default :如果一个变量没有被提供,或者值为 false 或空,则使用默认值,否则使用变量的值
slice
value |slice:'10'
详细的过滤器
https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
示例
查询所有英雄信息显示出来,要求奇数行显示为红色,偶数行显示为蓝色