过滤器格式{{   }}

标签格式{%  %}

模板中过滤器filter只能使用一个参数,自定义标签中则可以使用多个参数!!!

过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}

过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}

标签参数不限,但不能放在if for语句中,就是当前if for那句代码里,在if for 其他地方可以使用!而过滤器可以用在if 和for语句中

for
{% for %}标签允许你按顺序遍历一个序列中的各个元素
Python的for语句语法为for X in Y,X是用来遍历Y的变量
每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
例如,显示给定athlete_list变量来显示athlete列表:

  1. <ul>
  2. {% for athlete in athlete_list %}
  3. <li>{{ athlete.name }}</li>
  4. {% endfor %}
  5. </ul>

在标签里添加reversed来反序循环列表:

  1. {% for athlete in athlete_list reversed %}
  2. ...
  3. {% endfor %}
  4. {% for %}标签可以嵌套:
  5. {% for country in countries %}
  6. <h1>{{ country.name }}</h1>
  7. <ul>
  8. {% for city in country.city_list %}
  9. <li>{{ city }}</li>
  10. {% endfor %}
  11. </ul>
  12. {% endfor %}

系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
类似的,系统也不支持continue语句,本章后面的“哲学和限制”会解释设计的原则
{% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:

  1. {% for item in todo_list %}
  2. <p>{{ forloop.counter }}: {{ item }}</p>
  3. {% endfor %}

2,forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
3,forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
4,forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
5,forloop.first当第一次循环时值为True,在特别情况下很有用:

  1. {% for object in objects %}
  2. {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}
  3. {{ object }}
  4. </li>
  5. {% endfor %}

6,forloop.last当最后一次循环时值为True

  1. {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}

7,forloop.parentloop在嵌套循环中表示父循环的forloop:

  1. {% for country in countries %}
  2. <table>
  3. {% for city in country.city_list %}
  4. <tr>
  5. <td>Country #{{ forloop.parentloop.counter }} </td>
  6. <td>City #{{ forloop.counter }}</td>
  7. <td>{{ city }}</td>
  8. </tr>
  9. {% endfor %}
  10. </table>
  11. {% endfor %}

富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
Django会在for标签的块中覆盖你定义的forloop变量的值
在其他非循环的地方,你的forloop变量仍然可用
我们建议模板变量不要使用forloop,如果你需要这样做来访问你自定义的forloop,你可以使用forloop.parentloop

一些实用但较少见的内建标签

comment

注释,{% comment %} 和 {% endcomment %}之间的内容被解释为注释

firstof

返回列表中第一个可用(非False)的变量或者字符串,注意的是firstof中的变量非自动转义

{% firstof var1 var2 var3 "fallback value" %}

for

for循环,可以在后面加入reversed参数遍历逆序的列表

{% for obj in list reversed %}

for...empty

如果for循环的参数-列表为空,将执行empty里面的内容

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athlete in this list!</li>
{% endfor %}
<ul>

default_if_none
             使用形式:{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
             意义:如果value是None,那么输出将使用缺省值

length
使用形式:{{ value | length }}
意义:返回value的长度。

wordcount
返回字符串中单词的数目

自定义标签和自定义过滤器

在app目录下建一个子目录,目录名称必须为templatetags,然后在该目录下新建一个.py文件(如Mytag.py),在该文件具体自定义标签和过滤器

#!/usr/bin/env python  
# _*_ coding:utf-8 _*_
# @File : blog/BlogAPP/templatetags/Mytag.py
from django import template
register = template.Library()

# 自定义一个有关时间转化的过滤器
@register.filter
def beijingtime(t):
"""
参数 t 的类型为datetime.datetime,形式如2017-09-11 23:12:34.634145 <class 'datetime.datetime'>
"""
from datetime import datetime
return datetime.fromtimestamp(t.timestamp()).strftime("%Y-%m-%d %H:%M") # 自定义一个css路径的标签
@register.simple_tag
def rbac_css():
    file_path = os.path.join('ql','theme','rbac.css')
if os.path.exists(file_path):
return mark_safe(open(file_path,'r',encoding='utf8').read())
else:
raise Exception("rbac主题未找到")

用法如下在模板html中
{% load Mytag %}
<style>
{% rbac_css %}
</style>
<span>{{ comment_item.creat_time|beijingtime }}</span>
 

最新文章

  1. 跟着百度学PHP[2]-foreach条件嵌套
  2. [BigData]关于HDFS的伪分布式安装和虚拟机网络的配置
  3. SQL大量数据查询的优化 及 非用like不可时的处理方案
  4. AR9331中Linux内核启动中与IRQ中断相关的文件
  5. web前端入门
  6. IOS开发使用YiRefresh进行刷新
  7. click和blur事件冲突解决方案
  8. 201521123027 &lt;java程序设计&gt;第八周学习总结
  9. Selenium Python 安装指导
  10. dlib人脸关键点检测的模型分析与压缩
  11. 项目中引入composer
  12. nginx配置ssl验证
  13. Data Source与数据库连接池简介 JDBC简介(八)
  14. MAC 地址(单播、组播、广播地址分类)
  15. 第二章 函数和window对象
  16. odoo仓库单据产品过滤写法
  17. mapReducer第一个例子WordCount
  18. Spring Boot干货系列:(六)静态资源和拦截器处理
  19. Html5之web workers多线程
  20. Eclipse的Debug调试技巧大全

热门文章

  1. Js的reduce()方法
  2. 批量修改mac系统文件的可读写权限
  3. Ext.extend
  4. 点击checkbox后,$(this).attr(&#39;checked&#39;)得到的值不会发生改变
  5. Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
  6. 记录CentOS 7.4 上安装MySQL&amp;MariaDB&amp;Redis&amp;Mongodb
  7. js 数组去重小技巧
  8. Truffle 4.0、Geth 1.7.2、TestRPC在私有链上搭建智能合约
  9. postgreSQL备份数据
  10. SqlSessionFactoryUtil