8 在python中空的列表 ( [] ),tuple( () ),字典( {} ),字符串( '' ),零( 0 ),还有 None 对象,在逻辑判断中都为假,其余的状况都为真。html
15 forloop.revcounter 是表示循环中剩余项的整型变量。在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。最后一次循环执行中,这个变量将被置1。python
16 forloop.revcounter0 相似于 forloop.revcounter ,但它以0作为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减1。在最后一次迭代时,该变量为0。django
17 forloop.first 是一个布尔值。在第一次执行循环时该变量为True,在下面的情形中这个变量是颇有用的。数据结构
18 forloop.last 是一个布尔值;在最后一次执行循环时被置为True。一个常见的用法是在一系列的连接之间放置管道符(|)框架
19 forloop 变量仅仅可以在循环中使用,在模板解析器碰到 {% endfor %} 标签时, forloop 就不可访问了函数
20 {% ifequal %} 标签比较两个值,当他们相同时,显示在 {% ifequal %} 和 {% endifequal %} 之中全部的值。oop
21 和 {% if %} 相似, {% ifequal %} 支持可选的 {% else%} 标签, 只有模板变量,字符串,整数和小数能够做为 {% ifequal %} 标签的参数,其余的一些类型,例如Python的字典类型、列表类型、布尔类型,不能用在 网站
{% ifequal %} 中.编码
22 象HTML和其余的语言例如python同样,Django模板系统也容许注释。 注释使用 {# #} lua
23 模板过滤器是在变量被显示前修改它的值的一个简单方法
23 addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是很是有用的。
24 date : 按指定的格式字符串参数格式化 date 或者 datetime 对象
25 在settings.py中的TEMPLATE_DIRS设置以下:
import os.path
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
26 django.shortcuts 模块中名为 render_to_response() 的函数。大多数时候,你将使用 render_to_response() ,而不是手动加载模板、建立 Context 和 HttpResponse 对象,它会加载模板、填充 context 、将经解析的模板结果返回为 HttpResponse 对象这一系列操做
27 {% include %} 。该标签容许在(模板中)包含其它的模板的内容。标签的参数是所要包含的模板名称,能够是一个变量,也能够是用单/双引号硬编码的字符串。每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减小重复
28 模板继承就是先构造一个基础框架模板,然后在其子模板中对它所包含站点公用部分和定义块进行重载。
29 {% block %} 标签告诉模板引擎,子模板能够重载这些部分
30 {% extends %} 标签,该模板是一个子模板。模板引擎当即装载其父模板
31 继承并不改变 context 的工做方式,并且你能够按照须要使用多层继承。使用继承的一种常见方式是下面的三层法:
a. 建立 base.html 模板,在其中定义站点的主要外观感觉。这些都是不常修改甚至从不修改的部分。
b. 为网站的每一个区域建立 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。这些模板对 base.html进行拓展,并包含区域特定的风格与设计。
c. 为每种类型的页面建立独立的模板,例如论坛页面或者图片库。这些模板拓展相应的区域模板。
32 使用模板继承的一些诀窍:
a. 若是在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。不然,模板继承将不起做用。
b. 通常来讲,基础模板中的 {% block %} 标签越多越好。记住,子模板没必要定义父模板中全部的代码块,所以你能够用合理的缺省值对一些代码块进行填充,而后只对子模板所需的代码块进行(重)定义。俗话说,钩子越多越好。
c. 若是发觉本身在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
d. 若是须要得到父模板中代码块的内容,可使用 {{ block.super }} 变量。若是只想在上级代码块基础上添加内容,而不是所有重载,该变量就显得很是有用了。
e. 不可同一个模板中定义多个同名的 {% block %} 。存在这样的限制是由于block 标签的工做方式是双向的。也就是说,block 标签不只挖了一个要填的坑,也定义了在 父 模板中这个坑所填充的内容。若是模板中出现了两个相同名称的{% block %} 标签,父模板将无从得知要使用哪一个块的内容。
f. {% extends %} 对所传入模板名称使用的加载方法和 get_template() 相同。也就是说,会将模板名称被添加到TEMPLATE_DIRS 设置以后。
g. 多数状况下, {% extends %} 的参数应该是字符串,可是若是直到运行时方能肯定父模板名,这个参数也能够是个变量。这使得你可以实现一些很酷的动态功能。