搞定 Django 模板内置标签!

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 单雨

责编 | 胡巍巍

出品 | 程序人生(ID:coder_life)

1.debug

概述 :

输出整体的调试信息,包括当前上下文和导入的模块。示例:

 
  

django
{% for o in list %}
    <div class="{% cycle 'row_blue' 'row_green' as rowcolor silent %}"></div>
    {% debug %}
{% endfor %}

这个标签会输出非常多的信息,通常只有前几行是有用的,如图:

640?wx_fmt=png

2.filter 

概述 :

对包含在其中的内容进行过滤。用法:

 
  

django
{% filter force_escape %}
   {需要转义的内容}
{% endfilter %}

传入参数:

filter标签可以传入参数,比如上述的force_escape(强制转义),可以传入多个参数,参数之间通过“|”进行分隔:

 
  

django
{% filter force_escape|upper %}
   {需要转义的内容}
{% endfilter %}

传入参数`{“myname”:"jack"}`渲染效果:

640?wx_fmt=png

小写字母经过过滤变成了大写。 

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"
}

渲染效果:

640?wx_fmt=png 

可见第一个不是False的变量是a4。 

返回默认字符串 :

firstof标签也可以设置一个在所有值都是False的情况下返回的字符串。示例:

 
  

django
{% firstof a1 a2 a3 "所有值都是空值" %}

渲染效果:

640?wx_fmt=png 

关闭HTML转义:

默认情况下,输出的变量内容和这个返回的字符串会自动进行HTML转义,如果想要显示一些特别的提示效果,比如红色的警告信息,可以这样:

 
  

django
{% autoescape off %}
    {% firstof a1 a2 a3  "<span style='color:red;'>所有值都是空值<span>" %}
{% endautoescape %}

渲染效果:

640?wx_fmt=png

这样所有的输出的变量和返回的默认字符串都不会进行自动HTML转义。 

如果只想其中的一些变量或者默认字符串不被转义,可以使用safe过滤器。示例:

 
  

django

    {% firstof a1|safe a2 a3  "<span style='color:red;'>所有值都是空值<span>"|safe %}

只有a1和默认字符串不会被转义。

假如`"a1":"<script type='txt\javascript'>alert('我是a1,我是第一个不是False的值')</script>""`渲染效果:

640?wx_fmt=png 

可以看到变量a1没有执行HTML转义,被当做HTML代码执行了。 

输出保存到变量:

firstof标签的输出也可以存储在一个变量中,用法: 

 
  

django
{% firstof a1 a2 a3  as not_false_value %}
{{  not_false_value }}

渲染效果:

640?wx_fmt=png

4.for 

概述:

循环数组中的每个项,使该项在上下文变量中可用。例如展示一个列表:

 
  

django
<ul>
{% for city in city_list %}
    <li>{{ city }}</li>
{% endfor %}
</ul>

传入参数`{"city_list":['北京','上海','哈尔滨','沈阳'']}`,渲染效果:

640?wx_fmt=png

倒序渲染:

 
  

django
<ul>
{% for city in city_list reversed %}
    <li>{{ city }}</li>
{% endfor %}
</ul>

效果:

640?wx_fmt=png 

渲染嵌套列表:

如果需要渲染嵌套列表,可以把子列表的项解压为单独的变量,比如渲染两只球队人员名单,每队有三个成员:

 
  

django

{% for member1,member2,member3 in team_list %}
    <li>
        {{ member1 }},{{ member2 }},{{ member3 }}
    </li>
{% endfor %}

传入参数`"team_list": [["乔丹", "詹姆斯", "哈登"], ["达尼尔", "杰斯", "本杰明"]]`,

渲染效果: 

640?wx_fmt=png

渲染字典:

for标签也可以渲染字典,比如渲染产品价格信息:

 
  

django
{% for product, price in data.items %}
    <li>{{ product }}: {{ price }}</li>
{% endfor %}

640?wx_fmt=png

注意: 对于点操作符,字典键查找优先于方法查找。 如果渲染的字典中包含一个名为“items”的键,则为products.items将返回products['items'],而不是products.items。 如果希望在模板中使用字典方法(项、值、键等),应该避免使用类似字典方法的键。  

for标签内置变量:

for标签内置变量的用法和普通变量一样。 

- forloop.counter:当前迭代项的索引,从1开始。

 
  

django
  {% for product, price in products.items %}
      <li>{{ product }}: {{ price }}</li>
      {{ forloop.counter}}{替换这个变量得到后面例子的渲染效果}
  {% endfor %}

640?wx_fmt=png

- forloop.counter0:当前迭代项的索引,从0开始。

640?wx_fmt=png

- forloop.revcounter:从循环项的末尾开始索引到1。 

- forloop.revcounter0:从循环项的末尾开始索引到0。

640?wx_fmt=png

- forloop.first:如果是第一经过循环,则为True。 

640?wx_fmt=png

- forloop.last: 如果是最后一次经过循环,则为True。  

640?wx_fmt=png

- 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 %}
          <li>{{ k }}: {{ v }}</li>
          {{ forloop.parentloop.counter}}
      {% endfor %}
  {% endfor %}

传入参数:`"categorys": {"products": {"car": "¥300000", "engine": "¥200000", "tyre": "¥2000"},"sales_volume":{"car":1000,"engine":500,"tyre":20000}, }`

渲染效果:

640?wx_fmt=png

5.for...empty 

概述:

for标签可以使用一个可选的{% empty %}子句,如果给定数组为空或无法找到,则显示该子句的文本。用法:

 
  

django
{% for product,price in products.items %}
    <li>{{product}}:{{price}}</li>
{% empty %}
    <li>产品列表为空</li>
{% endfor %}

传入参数:`"products": {}` 

渲染效果:

640?wx_fmt=png

640?wx_fmt=png

 相当于使用一个if-else判断:

 
  

django
{% if products %}
    {% for product,price in products.items %}
        <li>{{product}}:{{price}}</li>
    {% endfor %}
  {% else %}
    <li>产品列表为空</li>
  {% endif %}

作者简介:单雨,90 后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究 AI,网络爬虫,微信小程序以及机器人,痴迷于 Coding,睡前必撸码。

640?wx_fmt=png

640?wx_fmt=jpeg

 热 文 推 荐 

 
 

640?wx_fmt=gif点击阅读原文,即刻阅读《程序员大本营》。

640?wx_fmt=png
你点的每个“在看”,我都认真当成了喜欢
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值