filter过滤器:它是一种最便捷的转化变量输出格式的方法 eg.{{ship_date|date:"F,jY"}} 此处通过管道符将变量ship_date传递给date过滤器,同时指定参数,date过滤器将根据指定参数,格式化输出;
深度变量查找:
模板系统能够非常简洁的处理复杂数据结构,例如,列表、字典、自定义类型
在django中遍历复杂数据结构的关键是句点操作符(.)
from django.template import Template, Context from django.http import HttpResponse def renderTemplate(request): t = Template("My name is {{person.name}}") ctx = Context({'person':{'name':'Bob','age':10}}) return HttpResponse(t.render(ctx))
class Person(object): def __init__(self,first_name, last_name): self.first_name, self.last_name = first_name, last_name t = Template('Hello,{{ person.first_name}}{{ person.last_name.upper}}') ctx = Context({'person': Person('John', 'Smith')}) print t.render(ctx)
备注: 模板系统中,通过句点操作符,你只能调用不带参数的方法,例如,upper方法
句点也可用于访问列表索引:
eg.
t = Template("item 2 is {{items.1}}")
ctx = Context({'items':['item1','item2','item3','item4','item5']})
print t.render(ctx)
不允许使用负数列表索引
句点查找规则可概括为:当模板系统在变量中遇到句点时,按照以下顺序尝试进行查找(短路逻辑):
1. 字典类型查找 foo["bar"]
2. 属性查找 foo.bar
3. 方法调用 foo.bar()
4. 列表类型索引查找 foo[bar]
方法调用行为:
在方法查找过程中,如果某方法抛出一个异常,除非该异常有一个silent_variable_failure属性并且值为True,否则的话,它将被传播;
当异常没有传播时(silent_variable_failure = True),模板里指定变量会被置为空字符串
def delete(self):
#ToDo
delete.alerts_data = True
如上这种情况下,模板系统不会执行任何以该方式进行标记的方法,如果模板文件里包含了{{acount.delete}} ,对象又有delete()方法,而这个方法又有
delete.alerts_data = True属性,那么在模板载入时,delete将不会被执行,它将静静的错误退出
如何处理无效变量:
默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败;