一:创建模板对象
创建一个Template对象最简单的方法就是直接实例化它,Template类就在django.template模块中,构造函数接受一个参数。
基本步骤:
1、转到project目录,输入命令python manage.py shell 启动交互对象
2、引入template模块,from django import template
python manage.py shell
from django import template # 引入 template模块
t = template.Template('my name is {{ name }}') # {{name}} 是模板变量
(当你创建一个Template对象,模板系统在内部编译这个内部格式,并做优化,做好渲染准备,但如果你的模板语法有错误,则在调用Template()时候则会抛出TemplatesyntaxError异常
抛出异常的情形:
1.无效的tags
2.标签的参数无效
3.无效的过滤器
4.无效的模板语法
5.未封闭的块标签
)
二:模板渲染
在创建完Template对象之后,你可以用context来传递数据给它,一个context是一系列变量和它们值的集合
context在Django里表现为Context类,也在django.template模块里,他的构造函数带有一个可选的参数:一个字典映射变量和它们的值。
调用Template对象的render()方法传递context来填充模板:
>>> from django.template import Context, Template
>>> t = Template('My name is {{ name }}.')
>>> c = Context({'name': 'Stephane'})
>>> t.render(c) # 返回的不是一个python字符串,而是Unicode对象
u'My name is Stephane.'
Django模板系统的基本规则:写模板,创建Template对象,创建Context,调用render()方法
三:同一模板,多个上下文
一旦有了模板对象,你就可以通过它渲染多个context,例如
from django.template import Template,Context
t = Template('hello ,{ name }}')
print(t.render(Context({'name':'lzsss'})
>>> hello , lzssss
print(t.render(Context({'name':'zxxxxxx}))
>>> hello , zxxxxxx
我们可以使用统一模板源渲染多个context,只进行一次模板创建,然后多次调用render()方法进行更加高效的渲染
四:深度变量的查找
在Django模板中遍历复杂数据结构的关键是句点字符(.)
eg:假设你要向模板传递一个python字典,要通过字典的键访问该字典的值,可以使用一个据点
from django.template import Template,Context
person = {"name":'tom',"age":"33"}
t = Template('{{ x.name }} is {{ x.age }} years old.')
c = Context({'x':person})
t.render(c)
>>>'tom is 33 years old.'
forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。第一次执行循环时这个变量会被设置
为0。
forloop.revcounter 是表示循环中剩余项的整型变量。在循环初次执行时 forloop.revcounter 将被设置
为序列中项的总数。最后一次循环执行中,这个变量将被置1。
forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循环时,该变
量会被置为序列的项的个数减1。
forloop.first 是一个布尔值,如果该迭代是第一次执行,那么它被置为```` 在下面的情形中这个变量是
很有用的: