Django标签和过滤器
过滤器格式{{ }}
标签格式{% %}
模板中过滤器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列表:
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- </ul>
在标签里添加reversed来反序循环列表:
- {% for athlete in athlete_list reversed %}
- ...
- {% endfor %}
- {% for %}标签可以嵌套:
- {% for country in countries %}
- <h1>{{ country.name }}</h1>
- <ul>
- {% for city in country.city_list %}
- <li>{{ city }}</li>
- {% endfor %}
- </ul>
- {% endfor %}
系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
类似的,系统也不支持continue语句,本章后面的“哲学和限制”会解释设计的原则
{% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:
- {% for item in todo_list %}
- <p>{{ forloop.counter }}: {{ item }}</p>
- {% endfor %}
2,forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
3,forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
4,forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
5,forloop.first当第一次循环时值为True,在特别情况下很有用:
- {% for object in objects %}
- {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}
- {{ object }}
- </li>
- {% endfor %}
6,forloop.last当最后一次循环时值为True
- {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}
7,forloop.parentloop在嵌套循环中表示父循环的forloop:
- {% for country in countries %}
- <table>
- {% for city in country.city_list %}
- <tr>
- <td>Country #{{ forloop.parentloop.counter }} </td>
- <td>City #{{ forloop.counter }}</td>
- <td>{{ city }}</td>
- </tr>
- {% endfor %}
- </table>
- {% 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>
Django标签和过滤器的更多相关文章
- django中自定义标签和过滤器
想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1 在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...
- django 自定义标签和过滤器
django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个pyt ...
- django 内建标签和过滤器参考
下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...
- Django 自定义模版标签和过滤器
实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码 ...
- django “如何”系列4:如何编写自定义模板标签和过滤器
django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...
- Django自定义模板标签和过滤器
1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py. 在这个模块中编写相关代码. 注意:templa ...
- python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)
昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
- django特殊的标签和过滤器
国际化标签和过滤器 Django还提供了一些模板标签和过滤器,用以控制模板中国际化的每个方面.它们允许对翻译,格式化和时区转换进行粒度控制. 1. i18n 此标签允许在模板中指定可翻译文本.要启用它 ...
随机推荐
- .Net基础——程序集与CIL
1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll则需要被其他程序集调用执行. CIL ...
- 学JAVA第七天,循环深入了解
因为星期五放假,所以今天补回. 上次已经解释过循环了,现在我们来进一步了解. 例如for循环:for( int i=0 : i<10 : i++ ){需要循环的内容},这样就会循环10次了 如果 ...
- SpringMVC进行文件上传
进行文件上传前需要添加相应的依赖 在xml文件中进行相应的文件上传解析器的配置 注意:这里有个坑,因为没注意,再排查错误的时候花了一点时间.就是给bean的id一定要是. 否者就会报如下的错误:
- Spring Boot统一异常处理实践
摘要: SpringBoot异常处理. 原文:Spring MVC/Boot 统一异常处理最佳实践 作者:赵俊 前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是一件棘手的事情, 对于很多 ...
- 浅谈ST表
发现自己学的一直都是假的ST表QWQ. ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到$O(nlogn)$预处理,$O(1)$查询最值 算法 ST表是利用 ...
- tarjan系列算法代码小结
个人使用,可能不是很详细 强联通分量 这里的dfn可以写成low 因为都是在栈中,只要保证该节点的low值不为本身即可 void tarjan(int now) { dfn[now]=low[now] ...
- 基于LBS的六边形热力图算法
六边形算法: 我把六边形铺满的分布图进行了切分,切分为矩形,每个矩形中有一个六边形.4个三角形.两个小长方形,依次计算.边界判断上,采用主流的MP>MN的方式(M为上边界对称点,N为与六边形的交 ...
- RecycleView设置顶部分割线(记录一个坑)
大家都知道,想给RecycleView设置分割线可以重写RecyclerView.ItemDecoration 项目过程中,遇到一个需求:RecycleView顶部有一条灰色的间隔,我想到了给Recy ...
- asp.net网页上获取其中表格中的数据(爬数据)
下面的方法获取页面中表格数据,每个页面不相同,获取的方式(主要是正则表达式)不一样,只是提供方法参考.大神勿喷,刚使用了,就记下来了. 其中数据怎么存,主要就看着怎么使用了.只是方便记录就都放在lis ...
- SQLServer之修改视图
修改视图注意事项 修改先前创建的视图. 其中包括索引视图. ALTER VIEW不影响相关的存储过程或触发器,并且不会更改权限. 如果原来的视图定义是使用 WITH ENCRYPTION 或 CHEC ...