Django 模板标签
Django 模板标签笔记,参考并补充 Django 模板 | 菜鸟教程
变量
使用双引号:
<h1>{{ hello }}</h1>
if/else 标签
if/else 对变量判断真假,支持嵌套:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:
{% if athlete_list and coach_list %}
athletes 和 coaches 变量都是可用的
{% endif %}
ifequal/ifnotequal 标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的内容:
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
类似,支持可选的 {% else%} 标签:
{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
for 标签
{% for %} 允许我们在一个序列上迭代,支持嵌套使用 {% for %} 标签:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}
...
{% endfor %}
注释标签
{# 这是一个注释 #}
include 标签
{% include %} 标签允许在模板中包含其它的模板的内容:
{% include "nav.html" %}
过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符 ” | ”
- lower: {{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写:
{{ name|lower }}
- first: 返回列表的第1个元素,变量必须是一个列表
- upper: 过滤管道可以被 *套接* ,一个过滤器管道的输出又可以作为下一个管道的输入,以下实例取第一个元素并将其转化为大写:
{{ my_list|first|upper }}
- truncatewords: 将字符串转换为省略表达方式, 过滤器的参数跟随冒号之后并且总是以双引号包含:
{{ bio|truncatewords:"30" }} #显示变量 bio 的前30个词
- addslashes: 添加反斜杠(转义字符)到任何反斜杠、单引号或者双引号前面
- length: 返回变量的长度
- date: 按指定的格式字符串参数格式化 date 或者 datetime 对象:
{{ pub_date|date:"F j, Y" }} #F 月份, j 每月第几天, Y Year 4位数字表示
模板继承
模板可以用继承的方式来实现复用
base.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> Django 模板 </title>
</head>
<body>
<h1>Hello Django!</h1>
<p>Django 模板标签</p>
{% block mainbody %}
<p>我是老大</p>
{% endblock %}
</body>
</html>
以上代码中,名为 mainbody 的 block 标签是可以被继承者们替换掉的部分;
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
hello.html 中继承 base.html:
{% extends "base.html" %}
{% block mainbody %}
<p>我是老二,继承了base.html文件</p>
{% endblock %}