Python--day65--模板语言之filter

参考的原文链接:http://www.cnblogs.com/liwenzhou/p/7931828.html

Filters(过滤器)

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

过滤器的语法: {{ value|filter_name:参数 }}

使用管道符"|"来应用过滤器。

例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

注意事项:

  1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
  2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
  3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
  4. '|'左右没有空格没有空格没有空格

length

返回值的长度,作用于字符串和列表。

{{ value|length }}

返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

 

filesizeformat

将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

{{ value|filesizeformat }}

如果 value 是 123456789,输出将会是 117.7 MB。

 

slice

切片

{{value|slice:"2:-1"}}

date

格式化

{{ value|date:"Y-m-d H:i:s"}}

safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

比如:

value = "<a href='#'>点我</a>"

{{ value|safe}}

truncatewords

在一定数量的字后截断字符串。(最短是9个字符)

{{ value|truncatewords:9}}

###使用的时候需要手动重启一下

 

自定义filter

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值 - -不一定是一个字符串
  • 参数的值 - 这可以有一个默认值,或完全省略

例如,在过滤器{{var | foo:'bar'}}中,过滤器foo将传递变量var和参数“bar”

自定义filter代码文件摆放位置:

复制代码
app01/
    __init__.py
    models.py
    templatetags/  # 在app01下面新建一个package package
        __init__.py
        app01_filters.py  # 建一个存放自定义filter的文件
    views.py
复制代码

编写自定义filter

使用自定义filter: 

代码示例:

 1 from django import template
 2 
 3 #生成注册器
 4 register = template.Library()
 5 
 6 
 7 #告诉Django的模板语言我现在有一个自定义的filter方法,名字叫sb
 8 @register.filter(name="sb")
 9 def add_sb(arg):
10     return "{} sb.".format(arg)
11 
12 #告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr
13 @register.filter(name="addstr")
14 def add_sb(arg,arg2):
15     """
16     第一个参数永远是管道符前面那个变量
17     :param arg: 管道符前面那个变量
18     :param arg2:冒号后面变量
19     :return:
20     """
21     return "{}{} ".format(arg,arg2)

 

posted @ 2019-02-27 17:00  莱茵河的雨季  阅读(203)  评论(0编辑  收藏  举报