搞定 Django 模板内置标签!
作者 | 单雨
责编 | 胡巍巍
出品 | 程序人生(ID:coder_life)
1.debug
概述 :
输出整体的调试信息,包括当前上下文和导入的模块。示例:
django
{% for o in list %}
class="{% cycle 'row_blue' 'row_green' as rowcolor silent %}">div>
{% debug %}
{% endfor %}
这个标签会输出非常多的信息,通常只有前几行是有用的,如图:
2.filter
概述 :
对包含在其中的内容进行过滤。用法:
django
{% filter force_escape %}
{需要转义的内容}
{% endfilter %}
传入参数:
filter标签可以传入参数,比如上述的force_escape(强制转义),可以传入多个参数,参数之间通过“|”进行分隔:
django
{% filter force_escape|upper %}
{需要转义的内容}
{% endfilter %}
传入参数`{“myname”:"jack"}`渲染效果:
小写字母经过过滤变成了大写。
3. firstof
概述 :
输出第一个不是False,不是空值或数字0的值,如果所有的值都是False,空值或者数字0就什么都不输出。使用示例:
django
{% firstof a1 a2 a3 a4 a5 a6 %}
传入参数:
`python
{
"myname": "jack",
"a1": False,
"a2": 0,
"a3": "",
"a4": True,
"a5": 1,
"a6": "a6"
}
渲染效果:
可见第一个不是False的变量是a4。
返回默认字符串 :
firstof标签也可以设置一个在所有值都是False的情况下返回的字符串。示例:
django
{% firstof a1 a2 a3 "所有值都是空值" %}
渲染效果:
关闭HTML转义:
默认情况下,输出的变量内容和这个返回的字符串会自动进行HTML转义,如果想要显示一些特别的提示效果,比如红色的警告信息,可以这样:
django
{% autoescape off %}
{% firstof a1 a2 a3 "< span style='color:red;'>所有值都是空值< span>" %}
{% endautoescape %}
渲染效果:
这样所有的输出的变量和返回的默认字符串都不会进行自动HTML转义。
如果只想其中的一些变量或者默认字符串不被转义,可以使用safe过滤器。示例:
django
{% firstof a1|safe a2 a3 "< span style='color:red;'>所有值都是空值< span>"|safe %}
只有a1和默认字符串不会被转义。
假如`"a1":"""`渲染效果:
可以看到变量a1没有执行HTML转义,被当做HTML代码执行了。
输出保存到变量:
firstof标签的输出也可以存储在一个变量中,用法:
django
{% firstof a1 a2 a3 as not_false_value %}
{{ not_false_value }}
渲染效果:
4.for
概述:
循环数组中的每个项,使该项在上下文变量中可用。例如展示一个列表:
django
< ul>
{% for city in city_list %}
< li>{{ city }}li>
{% endfor %}
ul>
传入参数`{"city_list":['北京','上海','哈尔滨','沈阳'']}`,渲染效果:
倒序渲染:
django
< ul>
{% for city in city_list reversed %}
< li>{{ city }}li>
{% endfor %}
ul>
效果:
渲染嵌套列表:
如果需要渲染嵌套列表,可以把子列表的项解压为单独的变量,比如渲染两只球队人员名单,每队有三个成员:
django
{% for member1,member2,member3 in team_list %}
{{ member1 }},{{ member2 }},{{ member3 }}
{% endfor %}
传入参数`"team_list": [["乔丹", "詹姆斯", "哈登"], ["达尼尔", "杰斯", "本杰明"]]`,
渲染效果:
渲染字典:
for标签也可以渲染字典,比如渲染产品价格信息:
django
{% for product, price in data.items %}
{% endfor %}
for标签内置变量:
for标签内置变量的用法和普通变量一样。
- forloop.counter:当前迭代项的索引,从1开始。
django
{% for product, price in products.items %}
{{ forloop.counter}}{替换这个变量得到后面例子的渲染效果}
{% endfor %}
- forloop.counter0:当前迭代项的索引,从0开始。
- forloop.revcounter:从循环项的末尾开始索引到1。
- forloop.revcounter0:从循环项的末尾开始索引到0。
- forloop.first:如果是第一经过循环,则为True。
- forloop.parentloop:在嵌套循环中,获取当前循环的父循环。forloop.parentloop还可以用点表示法引用内置循环变量,比如:forloop.parentloop.counter、forloop.parentloop.revcounter、forloop.first。效果示例:
使用forloop.parentloop.counter父循环的当前索引。
django
{% for value in categorys.values %}
{% for k, v in value.items %}
{{ forloop.parentloop.counter}}
{% endfor %}
{% endfor %}
传入参数:`"categorys": {"products": {"car": "¥300000", "engine": "¥200000", "tyre": "¥2000"},"sales_volume":{"car":1000,"engine":500,"tyre":20000}, }`
渲染效果:
5.for...empty
概述:
for标签可以使用一个可选的{% empty %}子句,如果给定数组为空或无法找到,则显示该子句的文本。用法:
django
{% for product,price in products.items %}
< li>{{product}}:{{price}}li>
{% empty %}
< li>产品列表为空li>
{% endfor %}
传入参数:`"products": {}`
渲染效果:
相当于使用一个if-else判断:
django
{% if products %}
{% for product,price in products.items %}
{% endfor %}
{% else %}
{% endif %}
作者简介:单雨,90 后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究 AI,网络爬虫,微信小程序以及机器人,痴迷于 Coding,睡前必撸码。
☞云栖大会|当数据中台遇上智能 看中台“鼻祖”阿里巴巴又有什么新花样?
☞肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019
点击阅读原文,即刻阅读《程序员大本营》。
你点的每个“在看”,我都认真当成了喜欢
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 聆听习主席新年贺词感受中国力量 7971714
- 2 德国电价跌至0以下 7997054
- 3 80%清华毕业生出国不归?校方发声 7841268
- 4 新年启新程 追梦向未来 7751434
- 5 曝顶流曾把女友藏行李箱偷摸见面 7679915
- 6 俄乌士兵近身肉搏画面罕见曝光 7527913
- 7 张颂文曾做200多次慈善捐款10元 7490651
- 8 潘展乐被美媒评选为世界第一 7333164
- 9 张一山发自拍疑回应暴瘦传闻 7236139
- 10 活力中国——各地迎新年扫描 7193967