django template 读书笔记

原创
2011/01/26 17:14
阅读数 485

模板句点查找规则:当模板在系统变量名中遇到点时,按以下顺序查找.

1 字典类型查找 e.g. foo['bar']

2 属性查找 e.g foo.bar

3 方法调用 e.g. foo.bar()

4 列表类型索引查找e.g foo[bar]

系统使用找到的第一个匹配的.这是短路的逻辑.

如果遇到多级查询嵌套: foo.bar.joke

先按字典类型查找foo["bar"],再按方法调用joke()

方法调用行为:

  在方法查找过程中,如果某方法抛出一个异常,除非该异常有一个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 %} 之间的所有内容

 

 

 

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部