模板句点查找规则:当模板在系统变量名中遇到点时,按如下顺序查找.web
1 字典类型查找 e.g. foo['bar']spa
2 属性查找 e.g foo.bar对象
3 方法调用 e.g. foo.bar()索引
4 列表类型索引查找e.g foo[bar]字符串
系统使用找到的第一个匹配的.这是短路的逻辑.io
若是遇到多级查询嵌套: foo.bar.jokeast
先按字典类型查找foo["bar"],再按方法调用joke()模板
方法调用行为:class
在方法查找过程当中,若是某方法抛出一个异常,除非该异常有一个silent_variable_failure属性而且值为True.不然的话它将被传播.若是哪样.模板里的变量会被设置为空字符串.e.g.变量
>>> t = Template("My name is {{ person.first_name }}.")
>>> class PersonClass3:
... def first_name(self):
... raise AssertionError, "foo"
>>> p = PersonClass3()
>>> t.render(Context({"person": p}))
Traceback (most recent call last):
...
AssertionError: foo
>>> class SilentAssertionError(AssertionError):
... silent_variable_failure = True
>>> class PersonClass4:
... def first_name(self):
... raise SilentAssertionError
>>> p = PersonClass4()
>>> t.render(Context({"person": p}))
u'My name is .'
default,若是一个变量不存在.模板系统会把它展现为空字符串.不作任何事情来表示失败.如上所示.
系统静悄悄地表示失败,而不是引起一个异常,由于这一般是人为错误形成的。 这种状况下,由于变量名有错误的情况或名称, 全部的查询都会失败。 现实世界中,对于一个web站点来讲,若是仅仅由于一个小的模板语法错误而形成没法访问,这是不可接受的..
上下文对象context
你能够经过传递一个字典给context()来初始化上下文.初始化后你可使用标准的Python字典语法向context对象添加或删除条目.
模板系统有内置的标签和过滤器.{% if %}标签检查条件是否为真.{%else%}条件是可选的.记得用{%endif%}标签结束,没有{%elif%}标签
Python & Django中.下列表示为 False:
空列表[] /空元组()/ 空字典{} /空字符串'' /零值/特殊对象None/对象False 除以上几点之外其它均视为True
if条件还能够用or and not等链接多个变量来判断.但不容许在同一标签中同时使用and or
{%for%}: 容许咱们在一个序列上迭代.与Python的 for 语句的情形相似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每个特定的循环中使用的变量名称。每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的全部内容