1 模板的组成
HTML代码+逻辑控制代码。
2 逻辑控制代码的组成
逻辑控制代码类型 | 使用方法 |
---|---|
变量(使用双大括号来引用变量 ) | {{ var_name }} |
标签(tag)的使用(使用大括号和百分号的组成来表示使用tag ) | {% load staticfiles %} |
过滤器(filter)的使用 | {{ ship_date ¦ date:"F j, Y" }},ship_date变量传给data过滤器,data过滤器通过使用"F j, Y"这几个参数来格式化日期数据。"¦"代表类似Unix命令中的管道操作。 |
2.1 常用标签(tag)
标签 | 说明 |
---|---|
{% if %} | 可以使用and, or, not来组织你的逻辑。但不允许and和or同时出现的条件语句中。新版本中已经支持{% elif %}这样的用法。 |
{% ifequal %}和{% ifnotequal %} | 比较是否相等,只限于简单的类型,比如字符串,整数,小数的比较,列表,字典,元组不支持。 |
{% for %} | 用来循环一个list,还可以使用resersed关键字来进行倒序遍历,一般可以用if语句来先判断一下列表是否为空,再进行遍历;还可以使用empty关键字来进行为空时候的跳转。 |
{% cycle %} | 在循环时轮流使用给定的字符串列表中的值。 |
{# #} | 单行注释 |
{% comment %} | 多行注释 |
{% csrf_token %} | 生成csrf_token的标签,用于防止跨站攻击验证。 |
{% debug %} | 调用调试信息 |
{% filter %} | 将filter 标签圈定的内容执行过滤器操作。 |
{% autoescape %} | 自动转义设置 |
{% firstof %} | 输出第一个值不等于False的变量 |
{% load %} | 加载标签库 |
{% now %} | 获取当前时间 |
{% spaceless %} | 移除空格 |
{% url %} | 引入路由配置的地址 |
{% verbatim %} | 禁止render |
{% with %} | 用更简单的变量名缓存复杂的变量名 |
2.2 常用过滤器(filter)
过滤器 | 作用 |
---|---|
add | 给变量加上响应的值 |
addslashes | 给变量中的引号前加上斜线 |
capfirst | 首字母大写 |
cut | 从字符串中移除指定的字符 |
date | 格式化日期字符串 |
default | 如果值是False,就替换成设置的默认值,否则就使用本来的值 |
default_if_none | 如果值是None,就替换成设置的默认值,否则就使用本来的值 |
dictsort | 按照设定参数(key)对应的value对列表进行排序 |
dictsortreversed | 和上面恰好相反 |
divisibleby | 是否能够被某个数字整除,是的话返回True,否则返回False |
escape | 对字符串进行转义 |
escapejs | 替换value中的某些字符,以适应JAVASCRIPT和JSON格式 |
filesizeformat | 格式化文件大小显示 |
first | 返回列表中的第一个值 |
last | 返回列表中最后一个值 |
floatformat | 格式化浮点数 |
length | 求字符串或者列表长度 |
length_is | 比较字符串或者列表的长度 |
urlencode | 对URL进行编码处理 |
upper\lower | 大写\小写 |
safe | 对某个变量关闭自动转义 |
slice | 切片操作 |
time | 格式化时间 |
timesince | 格式化时间 (e.g., “4 days, 6 hours”). |
truncatechars | 按照字符截取字符串 |
truncatewords | 按照单词截取字符串 |
striptags | 过滤掉html标签 |
3 模板包含和继承
3.1 概念
- 包含
{% include %} 允许在模板中包含其它模板的内容。
标签的参数可以是:模板名称 、变量、字符串。
{% include 'nav.html' %}
{% include 'app/nav.html' %}
{% include template_name %}
还可以在包含的时候传递变量。
- 继承:
本质上说:模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点共用部分和定义进行重载。
1、定义块:{% block %}
2、继承父模板{% extends %}
3.2 注意事项
- 包含和继承可以把一些共用的网页模块独立出来,以减少代码的冗余。
- 如果在模板里使用{% extends %}的话,这个标签必须在所有模板标签的最前面,否则模板继承不工作
- 通常尽可能模板里的{% block %}越多越好,子模板不必定义所有的父block
- 如果你需要得到父模板的块内容,{{ block.super }}变量可以帮你完成工作
当你需要给父块添加内容而不是取代它的时候这就很有用 - 不能在同一模板里定义多个同名的{% block %},因为块标签同时在两个地方工作,不仅仅在子模板中,而且在父模板中也填充内容,如果子模板有两个同名的标签,父模板将不能决定使用哪个块内容来使用
4 参考链接
Django 1.9:官方文档
Django 1.9:官方文档 - 包含
Django 1.9:官方文档 - 模块
Django 1.9:官方文档 - 继承
Django 1.82:中文翻译文档【仅供参考】