一、过滤器语法
语法如下:
- 使⽤管道符号 | 来应⽤过滤器,⽤于进⾏计算、转换操作,可以使⽤在变量、标签中。
- 如果过滤器需要参数,则使⽤冒号:传递参数。
- 变量 | 过滤器:参数
列举⼏个如下:
- safe,禁⽤转义,告诉模板这个变量是安全的,可以解释执⾏
- length,⻓度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
- default,默认值,如果变量不存在时则返回默认值。
- data | default:‘默认值’。
- date,⽇期,⽤于对⽇期类型的值进⾏字符串格式化。
常⽤的格式化字符如下:
- Y表示年,格式为4位,y表示两位的年。
- m表示⽉,格式为01,02,12等。
- d表示⽇, 格式为01,02等。
- j表示⽇,格式为1,2等。
- H表示时,24进制,h表示12进制的时。
- i表示分,为0-59。
- s表示秒,为0-59。
- value | date:“Y年m⽉j⽇ H时i分s秒”
二.常⻅形式
使⽤形式为:{{ value | add: “2”}}:意义:将value的值增加2
使⽤形式为:{{ value | capfirst }} :意义:value的第⼀个字符转化成⼤写形式
使⽤形式为:
(a) {{ value | date:“Y-m-d h:i:s” }}
例如:如果value是⼀个datetime对象
(datetime.datetime.now()) 那么输出将是字符串"Wed 09 Jan 2008"
(b) {{ value | date }},这种形式没有格式化字符串,这时候,格式化字符串会⾃动采⽤DATE_FORMAT所设置的形式。
意义:将⽇期格式数据按照给定的格式输出
使⽤形式:{{ value | default: “nothing” }},例如,如果value是"",那么输出将是nothing
意义:如果value的意义是False,那么输出使⽤缺省值
使⽤形式:{{ value | divisibleby:arg}},如果value是21,arg是3,那么输出将是True
意义:如果value能够被arg整除,那么返回值将是True
使⽤形式:{{ value | first }}
意义:返回列表中的第⼀个Item,
例如,如果value是列表[‘a’,‘b’,‘c’],那么输出将是’a’。
使⽤形式:{{value | safe}} :进⾏HTML标签转换
意义:当系统设置autoescaping打开的时候,该过滤器使得输出不进⾏escape转换
使⽤形式:{{value | slugify}}
意义:将value转换成⼩写形式,同时删除所有分单词字符,并将空格变成横线
例如:如果value是how are you,那么输出将是how-are-you
使⽤形式:{{value | truncatewords:2}}
意义:将value切成truncatewords指定的单词数⽬
例如:如果value是how are you 那么输出将是:how are …
视图类
from django.views import View
from django.template import loader
class UserView(View):
def put(self,request):
content = {
'clist':[1,2,3,4,5],
'h1tag':'<h1>tag</h1>',
'pub_date': datetime.strptime('2022-4-17', '%Y-%m-%d').date(),
'value':22
}
return render(request, 'film/index1.html', content)
模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for cnum in clist %}
{{ cnum | add:'10' }}
{% endfor %}
<br>
{{ h1tag | safe }}
{{ pub_date | date:'Y-m-d' }}
{{ value | divisibleby:3 }}
{{ clist | first }}
</body>
</html>
响应结果:
三、自定义过滤器
实现步骤
1、在子应用下创建python package命名为templatetag(固定的)
2、在templatetag下创建python文件,命名myfilter.py(随意设置的)
3、myfilter文件中增加过滤器逻辑处理函数
4、模板页面顶部加载myfilter文件,{% load filter %}
5、在模板页面应用自定义过滤器
举例:
myfilter.py文件
from django.template.defaultfilters import register
import markdown
@register.filter(is_safe=False)
def add_arg(value, arg):
"""Add the arg to the value."""
try:
return int(value) + int(arg)
except (ValueError, TypeError):
try:
return value + arg
except Exception:
return ''
@register.filter(is_safe=False)
def markdown_data(value):
"""
markdown解析文本
:param value:
:return:
"""
return markdown.markdown(value)
视图类
class UserView(View):
def put(self,request):
content = {
'clist':[1,2,3,4,5],
'h1tag':'<h1>tag</h1>',
'pub_date': datetime.strptime('2022-4-17', '%Y-%m-%d').date(),
'value':22,
'mtag':'## 文集'
}
return render(request, 'film/index1.html', content)
模板文件
{% load myfilter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for cnum in clist %}
{{ cnum | add_arg:'20' }}
{% endfor %}
{{ mtag | markdown_data | safe }}
</body>
</html>
响应结果: