7.2 模板语言
2025-02-17
7.2.1 基本语法 {{}} {% %}
方法调用
不想索引调用需要设置alters_data=True
- 例子
class A:
def z(self):
return 'Django'
z.alters_data = Truefor循环
在for标签的内部,可以通过访问forloop变量的属性获取迭代过程中的一些信息
forloop.counter从1开始计数。除此之外,forloop还包含如下一些属性。
- (1)counter0:与counter一样用来计数,但是它从0开始。
- (2)revcounter:用来表示当前循环中剩余元素的数量。第一次迭代时,返回的是列表中元素的总数,最后一次的返回值是1。
- (3)revcounter0:与revcounter的含义相同,但是由于其索引是基于0的,因此它的值等于revcounter减去1。
- (4)first:返回一个布尔值,True标识为当前迭代的是第一个元素,其他位置的元素返回False。
- (5)last:也是一个布尔值,迭代最后一个元素时返回True,其他情况为False。
- (6)parentloop:对于嵌套迭代的场景,用来引用父级循环的forloop变量。
- 需要注意,forloop只可以在for与endfor之间使用。对于first和last属性,可以通过if标签对特定的元素做特殊处理,而像counter这类属性,常常用于调试程序。
获取视图访问地址的url标签
- 格式:
{% url 'ns:name' arg1,arg2,.... %} - 其中,ns是视图的命名空间,name是视图的名称。如果需要,还可以给定参数构造动态的url
- 例如:
{% url 'post:hello' %}
多行注释的comment标签
- 格式
{% comment %}
{% endcomment %}判断变量相等或不相等的标签
- 提供了
ifequal和ifnotequal标签,用于判断变量是否相等 - v1、v2除了可以是模板变量,也可以是硬编码的字符串、整数或小数,但不可以是字典、列表等类型
{% ifequal v1 v2 %}
{% else %}
{% endifqueal%}7.2.2 过滤器(|)
过滤器用于在显示变量之前对变量的值进行调整,它们在模板中很常见,使用管道符号(|)指定;有些过滤器可以接受参数,如果参数中带有空格,则需要用引号括起来 参考:https://weread.qq.com/web/reader/6e4329007193f1e66e43129k19c3222022419ca14e7eef7
7.2.3 模板继承(block)
模板继承使用起来非常简单,只需要定义好被继承的父模板,其中包含通用元素和可以被子模板覆盖的block部分即可
(1)block标签成对出现,需要
{%endblock%}标记结束。(2)需要给block标签起个名字,子模板中具有同样名称的block块完成对父模板的替换。
(3)子模板不需要定义父模板中的所有block,未定义时,子模板将原样使用父模板中的内容。
(4)子模板需要使用
{%extends%}标签继承父模板,且其必须是模板中的第一个标签,通常继承声明会放在文件的第一行{{block.super}}变量,可以获取到父模板中渲染后的结果
Django建议,父模板中的{%block%}标签应该越多越好,毕竟,子模板不需要完全重写所有的标签,所以,可以多定义一些通用或者默认的内容