Django 学习日记 - Templates - setp10

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 注意事项

  1. 包含和继承可以把一些共用的网页模块独立出来,以减少代码的冗余。
  2. 如果在模板里使用{% extends %}的话,这个标签必须在所有模板标签的最前面,否则模板继承不工作
  3. 通常尽可能模板里的{% block %}越多越好,子模板不必定义所有的父block
  4. 如果你需要得到父模板的块内容,{{ block.super }}变量可以帮你完成工作
    当你需要给父块添加内容而不是取代它的时候这就很有用
  5. 不能在同一模板里定义多个同名的{% block %},因为块标签同时在两个地方工作,不仅仅在子模板中,而且在父模板中也填充内容,如果子模板有两个同名的标签,父模板将不能决定使用哪个块内容来使用

4 参考链接

Django 1.9:官方文档
Django 1.9:官方文档 - 包含
Django 1.9:官方文档 - 模块
Django 1.9:官方文档 - 继承
Django 1.82:中文翻译文档【仅供参考】

你可能感兴趣的:(Django 学习日记 - Templates - setp10)