Django1.11 视图和模板语言详解

模板语言详解

模板中也有自己的语言,该语言可以实现数据展示

  • 变量和循环
{{ item }}

{% for item in item_list %} 
  <a>{{ item }}</a>  
    {{ forloop.counter }}
    {{ forloop.first }}
    {{ forloop.last }} 
{% endfor %}
<!--
forloop 变量只能在循环中得到,当模板解析器到达{% endfor %}时, forloop 就会消失
-->
  • 判断
{% if obj %}  {% else %} {% endif %}

<!--
{% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量

{% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的:
{% if obj1 and obj2 or obj3 %} 
-->

  • 继承
<!--母板:base.html 文件-->
{% block title %}{% endblock %}

<!-- 子板继承 -->
{% extends "base.html" %}

{% block title %}
<div>
    新内容,原来包含在母版的盒子内的内容将被覆盖
</div>
{% endblock %}

<!-- 子板继承时,在原来母版内容基础上再添加新的内容 -->
{% block title %}
{{ block.super }} <!--继续展示上级代码块的内容-->
<div>原来内容还在,并添加新的内容</div>
{% endblock %}

<!--
需要注意的点:
1. 如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。

2. 基础模板中的 {% block %} 标签越多越好,子模板不必定义父模板中的每个 {% block %}。

3. {% block %} 的名字在同一个模板中不允许重复

-->
  • csrf_token

    {% csrf_token %}
    

    用于生成csrf_token的标签,用于防治跨站攻击验证。 其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。

  • 加载引入 html 文件片段
{% load "other.html"%}
  • 其他方法:

    <!-- 时间日期格式化 -->
    {{ date_value|date:"Y-m-d H:i:s"}}
    
    <!-- 信任外部标签 -->
    <!-- 
    tpl_ul = <ul><li>我是后台视图传过来的标签</li></ul> 
    -->
    {{ tpl_ul |safe }}
    
    <!-- v_list = [] -->
    {{ v_list|default:'空的' }}<br>
    
    

内置的过滤器

date

{{ staff.date|date:'Y-m-d'}}  
// 2018-12-17

truncatewords

<!-- 只显示 content 变量的前30个词 -->
{{ item.content |truncatewords:30 }}  

default

<!--如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值-->
{{ value|default:"nothing" }}

default_if_none

<!--假如 value 的值是 None 这显示出指的的值-->
{{ value|default_if_none:"" }}

ength

<!--返回值的长度。它对字符串和列表都起作用-->
{{ value|length }}

filesizeformat

将该数值格式化为一个 “人类可读的” 文件容量大小 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)

{{ value|filesizeformat }}

add

把add后的参数加给value

{{ value|add:"2" }}  <!--如果 value 为 4,则会输出 6.-->

capfirst

将变量首字母变大写

{{ value|capfirst }}  <!--如果value是test过滤后转为Test-->

cut

移除value中所有的与给出的变量相同的字符串

{{ value|cut:" " }}

dictsort

根据指定的key值对列表字典排序,并返回

{{ value|dictsort:"name" }}

如,给定的值是:

[
    {'name': 'peter', 'age': 19},
    {'name': 'amy', 'age': 22},
    {'name': 'jim', 'age': 31},
]

那么结果将是;

[
    {'name': 'amy', 'age': 22},
    {'name': 'jim', 'age': 31},
    {'name': 'peter', 'age': 19},
]

也可以处理较为复杂的;

{% for book in books|dictsort:"author.age" %}
    * {{ book.title }} ({{ book.author.name }})
{% endfor %}

如给定值为:

[
    {'title': '1984', 'author': {'name': 'George', 'age': 45}},
    {'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
    {'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]

那么结果为:

* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)

random

随机返回一个值

{{ value|random }}

如果 value 是 列表 ['a', 'b', 'c', 'd'], 可能输出的是 "b"

slice

**切片 ** 可对列表或字符串切片

{{ some_list|slice:":2" }}

如果 some_list['a', 'b', 'c'], 输出结果为 ['a', 'b']

divisibleby

用于判断整除

<!--是否被 5 整除-->
{{ nmu|divisibleby: 5 }}
Emmet:HTML/CSS代码快速编写神器
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容