python django 模板

1 用两个大括号括起来的文字{{person_name}} 称为 变量
2 被 大括号和面分号包围的文件({% if ordered_warranty %}) 是模板标签
3 过滤器是用管道符(|) 和Unix管道符同样
一旦你建立一个  Template  对象,你能够用  context  来传递数据给它。 一个context是一系列变量和它们值的集合。模板使用它来赋值模板变量标签和 执行块标签。
变量名必须由英文字符开始 (A-Z或a-z)并能够包含数字字符、下划线和小数点。 (小数点在这里有特别的用途,稍后咱们会讲到)变量是大小写敏感的。
在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)。使用句点能够访问字典的键值、属性、索引和对象的方法。
7 {% if %} 标签检查(evaluate)一个变量,若是这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容. {% else %} 标签是可选的:
 

在python中空的列表 ( [] ),tuple( () ),字典( {} ),字符串( '' ),零( 0 ),还有 None 对象,在逻辑判断中都为假,其余的状况都为真。html

{% if %}  标签接受  and  ,  or  或者  not  关键字来对多个变量作判断 ,或者对变量取反(  not  ) 并无
10    {% elif %}  标签,请使用嵌套的 {% if %} , 必定要用 {% endif %} 关闭每个 {% if %} 标签.
11  {% for %}  容许咱们在一个序列上迭代。与Python的  for  语句的情形相似,循环语法是  for X in Y  ,Y是要迭代的序列而X是在每个特定的循环中使用的变量名称。每一次循环中,模板系统会渲染在  {% for %}  和  {% endfor %}  之间的全部内容.
12  Django不支持退出循环操做。若是咱们想退出循环,能够改变正在迭代的变量,让其仅仅包含须要迭代的项目
13  {% for %}  标签在循环中设置了一个特殊的  forloop  模板变量
14  forloop.counter0   相似于   forloop.counter   ,可是它是从0计数的。第一次执行循环时这个变量会被设置为0。

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 %} 的参数应该是字符串,可是若是直到运行时方能肯定父模板名,这个参数也能够是个变量。这使得你可以实现一些很酷的动态功能。

相关文章
相关标签/搜索