模板常用过滤器

  • 有时候需要对模板中的一些数据进行处理。一般是通过函数的形式来完成,而在DTL中,不支持函数的调用形式(),因此不能给函数传递参数。可以通过过滤器来实现,过滤器本身实现就是函数。过滤器使用的是|传参可以只有一个参数(左边)

:和arg之间不能有空格

  1. {# 常用的add过滤器 #}
  2. {{ value|add:arg }}
  3. {# 等同于add(value ,arg) #}

add

  • 将传进来的参数添加到原来的值上面去。这个过滤器会尝试将paramvalue转换成为整型然后进行相加。如果转换整型过程中失败(抛出异常),则将paramvalue进行拼接。如果两者都是字符串,那么就会拼接成字符串,如果都是列表,则会拼接为列表。
  1. {{ value|add:arg }}

如果value是4,arg2,则结果为数字6.如果是字符串比如jack,则结果为jack2

源代码如下:

  1. def add(value, arg):
  2. # Add the arg to the value.
  3. try:
  4. return int(value) + int(arg)
  5. excpet (ValueError, TypeError):
  6. try:
  7. return value + arg
  8. except Exception:
  9. return ''
  • 实例代码: ```python

    urls.py

path(‘add/‘, views.add_filter)

views.py

def add_filter(request): context = { “value1”: [1, 2, 3, “a”, [1, 2, 3]], “value2”: [“aa”, “bb”, {“param”: “value”}] } return render(request, “add.html”, context=context)

  1. ```html
  2. <!-- add.html -->
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>过滤器add调用</title>
  8. </head>
  9. <body>
  10. <h1>
  11. {{ value1 |add:value2 }}
  12. </h1>
  13. </body>
  14. </html>
  • 运行
    模板常用过滤器 - 图1

cut

  • 移除值中所有指定的字符串。类似python中的replace(args,"")

:和arg之间不能有空格

  1. {{ value | cut:" " }}
  2. {# value中的空格去除 #}

源代码如下:

  1. def cut(value, arg):
  2. # Remove all values of arg from the given string
  3. safe = isinstance(value, SafeData)
  4. value = value.replace(arg, '')
  5. if safe and arg != ';':
  6. return mark_safe(value)
  7. return value
  • 实例代码 ```python

    urls.py

    path(‘cut/‘, views.cut_filter)

views.py

def cut_filter(request): return render(request, “cut.html”)

  1. ```html
  2. <!-- cut.html-->
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>cut过滤器</title>
  8. </head>
  9. <body>
  10. <h2>
  11. {{ "hello"|cut:"l" }}
  12. </h2>
  13. </body>
  14. </html>

date

  • 将一个日期按照指定的格式,格式为字符串。

    1. {{ day|date:"格式字符串“ }}
  • 时间格式化表: | 格式字符 | 描述 | 示例 | | :—-: | :—-: | :—-: | | Y | 四位数字的年份 | 2019 | | m | 两位数字的月份 | 01-12 | | d | 两位数字的天数 | 01-31 | | n | 月份,无0前缀 | 1-12 | | j | 天数,无0前缀 | 1-31 | | h | 小时,12小时制,有0前缀 | 01-12 | | g | 小时,12小时制,无0前缀 | 1-12 | | H | 小时,24小时制,有0前缀 | 01-24 | | G | 小时,24小时制,无0前缀 | 1-24 | | i | 分钟,有0前缀 | 00-59 | | s | 秒,有0前缀 | 00-59 |

  • 实例

  1. # urls.py
  2. path('date/', views.date_filter),
  1. # views.py
  2. def date_filter(request):
  3. context = {
  4. "day": datetime.now()
  5. }
  6. return render(request, "date.html", context=context)
  1. <!-- date.html -->
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>date</title>
  7. </head>
  8. <body>
  9. <h3>
  10. {{ day|date:"Y/n/j g:i:s" }}
  11. </h3>
  12. </body>
  13. </html>
  • 运行
    模板常用过滤器 - 图2

default

如果value是一个Flase的值,比如[] {},None,""等在if中被认为是False的值,可以使用default够氯气提供的默认值arg

  1. {{ value|default:arg }}

如果valueNoneargno value,则模板显示为no value

default_if_none

仅仅当valueNone才会使用arg的值

  1. {{ value|default_if_none:args }}

first

返回列表/元组/字符串的第一个元素

  1. {{ value|first }}

如果value等于"abc", 模板显示a

last

返回列表/元组/字符串的最后一个元素

  1. {{ value|last }}

如果value等于["a", "b",],模板显示b

floatformat

四舍五入的方式格式化一个浮点数类型

  • 如果这个过滤器没有传递任何参数
  • 只会保留一个小数
  • 若小数全为0,则只保留整数
  • 如果传递参数,则标识具体要保留几个小数
  • 实例
  1. # urls.py
  2. path('floatformat/', views.floatformat_filter),
  1. # views.py
  2. def floatformat_filter(request):
  3. context = {
  4. "value11": 3.123,
  5. "value12": 3.193,
  6. "value13": 3.000,
  7. "value21": 3.1415926,
  8. "value22": 3.1415926,
  9. "value23": 3.1415926,
  10. }
  11. return render(request, "floatformat.html", context=context)
  1. <!-- floatformat.html -->
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>floatformat</title>
  7. </head>
  8. <body>
  9. <h4>
  10. {{ value11|floatformat }}
  11. <br>
  12. {{ value12|floatformat }}
  13. <br>
  14. {{ value13|floatformat }}
  15. <br>
  16. </h4>
  17. <h4>
  18. {{ value21|floatformat:0 }}
  19. <br>
  20. {{ value22|floatformat:1 }}
  21. <br>
  22. {{ value23|floatformat:2 }}
  23. <br>
  24. </h4>
  25. </body>
  26. </html>
  • 运行
    模板常用过滤器 - 图3

join

类似python的join ,将列表/元组/字符串用指定的字符进行拼接

  1. {{ value|join:'+' }}

如果value"abc",则模板输出为a+b+c

  • 实例

    1. # urls.py
    2. path('join/', views.join_filter),
    1. # views.py
    2. def join_filter(request):
    3. context = {
    4. "value": "abc",
    5. }
    6. return render(request, "join.html", context=context)
    1. <!-- join.html -->
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>join</title>
    7. </head>
    8. <body>
    9. {{ value|join:'+' }}
    10. </body>
    11. </html>
  • 运行
    模板常用过滤器 - 图4

length

获取一个列表/元组/字符串/字典的长度。

  1. {{ value|length }}

valueNone,则返回0

lower

将值中所有的字符全部转换为小写

  1. {{ value|lower }}

upper

将值中所有的字符转换为大写

  1. { value|upper }

random

在被给的列表/字符串/元组中随机的选择一个值

  1. {{ value|random }}

safe

标记一个字符串是安全的。也就是会关掉这个字符串的自动转义。类似模板标签中的{% autoescape off %}

  1. {{ value|sage }}

如果value是一个不包含任何特殊字符的字符串,会正常输出字符串

如果是一串html代码,那么会safe过滤器就将这串代码作为html代码输出

  • 实例
    1. # urls.py
    2. path('safe/', views.safe_filter),
    ```python

    views.py

def safe_filter(request): context = { “normal”: “原样字符串

aaa

“, “url”: “百度“, } return render(request, “safe.html”, context=context)

  1. ```html
  2. {# safe.html #}
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>safe</title>
  8. </head>
  9. <body>
  10. <h4>
  11. {{ normal|safe }}
  12. <br>
  13. {{ url|safe }}
  14. </h4>
  15. </body>
  16. </html>
  • 运行
    模板常用过滤器 - 图5

slice

类似python中的切片操作

  1. {{ a_list|slice:"切片格式" }}

比如a_list[1,2,3,4,],"切片格式"[::-],则模板输出为[4,3,2,1]

striptags

删除字符串中所有的html标签。

  1. {{ value|striptags }}

如果value<h1> jack </h1>,那么模板输出为jack

truncatechars

如果给定的字符串长度超过了过滤器指定的长度。那么会进行切割,并且拼接三个点来作为省略号

注意三个点也算在指定的长度里面,算三个字符

  1. {{ value|truncatechar:number }}

truncatechars_html

会忽略字符串中的html标签,其他同truncatechars