那么首先来说明下什么时Filter什么时tag了,如何去区分了
1、在使用上区别:
filter 使用方法{{ obj|filter:param }}
tag使用方法{% tags %}
2、filter可以使用作为if判断语句的标签,标签时不可以的
3、filter最多只能传递两个参数,而且tag可以传递多个
filter使用说明
语法的格式如下
{{ obj|filter:param }}
obj 我们需要处理的对象
filter 我们的filter,常见有如下罗列出的
param filter的参数
1、add
添加相应的值,这个比较好理解,例如:
{{ 3|add:2 }} //那么这个就是3+2最后结果等于5,当然了我们的3一般时python传过来的变量了。
注意前面的obj只能时整形数值,字符串无法相加
age|add:3
2、addslashes
给变量中的引号前加上斜线,就是转译引号,
例如:
{{"q'mm'df"|addslashes}}
那么该输出接入如下
q\'mm\'df
3、capfirst
首字目大写,很好理解不多说
例如:
{{"q'mm'df"|capfirst}}
那么输出结果如下:
Q'mm'df
4、cut
把指定的字符串剪切掉
例如我们把单引号去掉:
{{"q'mm'df"|cut:"'"}}
输出如下:
Qmmdf
5、date
格式化时间日期显示,注意了,需要处理的对象必须时时间对象类型
例如:
dt变量类容为:{{ dt }}<br>
处理后的内容:{{ dt|date:'Y-m-d' }}
输出结果如下:
dt变量类容为:April 6, 2018, 1:07 p.m.
处理后的内容:2018-04-06
6、default
如果值是False,就替换成设置的默认值,否则就是用本来的值
例如:
{{False|default:"这是False"}}
<br>
{{True|default:"这是True"}}
输出结果如下:
这是False
True
7、default_if_none
如果值是None,就替换成设置的默认值,否则就使用本来的值,和default差不多原理
例如:
{{
None|default_if_none:"没有值默认替换" }}
<br>
{{
"
"|default_if_none:"就算有一个空格也是不会替换的" }}
输入结果如下:
没有值默认替换
8、filesizeformat
对数字进行格式化,IT中经常使用到的容量显示技术
例如:
{{
"5120"|filesizeformat
}}
结果就是
5.0 KB
9、first、last、slice
字符串处理,first取第一个字符,last去最后一个字符,slice切片和python中一样使用
例如:
{{ "5120"|last }}
<br>
{{ "5120"|first }}
<br>
{{ "5120"|slice:":-2" }}
结果:
0
5
51
10、safe、autoescape、striptags
让浏览器渲染我们的变量内容,
例如:
原始变量:{{ dt }}
<br>
有时候我们想浏览器去渲染我们在数据库等地方取出来的html语言:
<br>
第一种方法,也是最常用的,使用safe:<br>
{{
dt|safe
}}
<br>
第二种方法,使用autoescape off,注意了autoescape 就是标签了:<br>
{%
autoescape
off%}
{{
dt
}}
{%
endautoescape
%}
<br>
第三种方法,使用striptags,注意该方法,会去除html语言标记哦:<br>
{{
dt|striptags
}}
效果如下:
当然还有很多的filter,以上罗列出来的只是我们常用的,更多的filter请查看官方文档
https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
一般常用的标签tag说明:
1、最常用的if标签 {% if %}
{% if 条件表达式 %}
表达式成立执行代码块
{% elif 条件表达式 %}
表达式成立执行代码块
{% else %}
所有表达式不成立执行代码块
{% endif %}
2、循环标签{% for %}的使用
{% for object in objects %}
执行的循环体
{% endfor %}
3、{%csrf_token%} 跨站攻击校验
请求网页时会生成一个csrf校验字符串,防止跨站请求工具,注意如果我们使用render_to_response方法,这个就不生效。
使用方法,在from表单中直接使用{% csrf_token %}
在前台我们每次请求,会随机生产一个校验码,在表单提交时后台会进行校验
4、{% url %} 链接url
显示指定路由的URL路径,具体查看上面的两个截图,我们需要在url路由指定name,前面进行调用
5、{% with %} 变量替换
例如把一个长的变量做一个短的别名
{% with total=www.opskb.com %}
{{ total }}
{% endwith %}
6、{% verbatim %}: 禁止进行渲染
有时候我们需要在页面上显示模板语言的原型,就会用到verbatim ,还记得上面的safe的filter
{% verbatim %}
{{ 123|add:2 }}
{% endverbatim %}
7、{% load %}加载标签库
我们使用最多的就是加载自定义标签库了,产靠下一节的演示
现在来介绍我们自定义Tag以及Filter
第一步:在APP目录下创建一个模块名字为templatetags(注意名字必须时这个)
第二步:在templatetags目录下创建py文件,这个文件名字可以随意了
第三步:创建我们自定义的filter以及tag
1、首先需要引用template,如果需要返回html内容需要引入mark_safe
from django import template
from django.utils.safestring import mark_safe
2、实例化一个对象,注意这里必须使用register 来接收,不可以使用其他名称
register = template.Library()
3、定义自已的函数,使用装饰器@register.filter、@register.simple_tag
4、在Django的设置中,在APP中一定加载我们的APP名称
5、在模板中我们使用load加载我们的文件名,就可以安装上面的方法进行使用
{% load my_test %}
详细代码(my_test):
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter
def filter_multi(v1, v2):
return v1 * v2
@register.simple_tag
def tag_multi(v1, v2, v3):
return v1 * v2 + v3
@register.simple_tag
def input_multi(id, name, class_name):
result = "<input id='%s' class='%s' name='%s'/>" % (id, class_name, name)
return mark_safe(result)
模板中我们使用
前台的效果如下图
文章末尾固定信息
评论