Django2.0-templates(4)-模版过滤器

模板常用过滤器

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

:和arg之间不能有空格

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

add

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

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

源代码如下:

def add(value, arg):
    # Add the arg to the value.
    try:
        return int(value) + int(arg)
    excpet (ValueError, TypeError):
        try:
            return value + arg
        except Exception:
            return ''
  • 实例代码:

    #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)
    
    
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>过滤器add调用title>
    head>
    <body>
        <h1>
            {{ value1 |add:value2 }}
        h1>
    body>
    html>
    
    • 运行

      Django2.0-templates(4)-模版过滤器_第1张图片

cut

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

:和arg之间不能有空格

{{ value | cut:" " }}
{# 将value中的空格去除 #}

源代码如下:

def cut(value, arg):
    # Remove all values of arg from the given string
    safe = isinstance(value, SafeData)
    value = value.replace(arg, '')
    if safe and arg != ';':
        return mark_safe(value)
    return value
  • 实例代码

    # urls.py
    path('cut/', views.cut_filter)
    
    # views.py
    def cut_filter(request):
        return render(request, "cut.html")
    
    
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>cut过滤器title>
    head>
    <body>
        <h2>
            {{ "hello"|cut:"l" }}
        h2>
    body>
    html>
    

date

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

    {{ 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
  • 实例

  # urls.py
  	path('date/', views.date_filter),
# views.py
def date_filter(request):
    context = {
        "day": datetime.now()
    }
    return render(request, "date.html", context=context)


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datetitle>
head>
<body>
    <h3>
        {{  day|date:"Y/n/j g:i:s" }}
    h3>
body>
html>
  • 运行

    Django2.0-templates(4)-模版过滤器_第2张图片

default

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

{{ value|default:arg }}

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

default_if_none

仅仅当valueNone才会使用arg的值

{{ value|default_if_none:args }}

first

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

{{ value|first }}

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

last

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

{{ value|last }}

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


floatformat

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

  • 如果这个过滤器没有传递任何参数

  • 只会保留一个小数

  • 若小数全为0,则只保留整数

  • 如果传递参数,则标识具体要保留几个小数

  • 实例

# urls.py
path('floatformat/', views.floatformat_filter),
# views.py
def floatformat_filter(request):
    context = {
        "value11": 3.123,
        "value12": 3.193,
        "value13": 3.000,

        "value21": 3.1415926,
        "value22": 3.1415926,
        "value23": 3.1415926,
    }

    return render(request, "floatformat.html", context=context)


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>floatformattitle>
head>
<body>
    <h4>
        {{ value11|floatformat }}
        <br>
        {{ value12|floatformat }}
        <br>
        {{ value13|floatformat }}
        <br>
    h4>
    <h4>
        {{ value21|floatformat:0 }}
        <br>
        {{ value22|floatformat:1 }}
        <br>
        {{ value23|floatformat:2 }}
        <br>

    h4>

body>
html>
  • 运行

    Django2.0-templates(4)-模版过滤器_第3张图片

join

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

{{ value|join:'+' }}

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

  • 实例

    # urls.py
    path('join/', views.join_filter),
    
    # views.py
    def join_filter(request):
        context = {
            "value": "abc",
        }
    
        return render(request, "join.html", context=context)
    
    
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jointitle>
    head>
    <body>
        {{ value|join:'+' }}
    body>
    html>
    
  • 运行

    Django2.0-templates(4)-模版过滤器_第4张图片


length

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

{{ value|length }}

valueNone,则返回0


lower

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

{{ value|lower }}

upper

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

{ value|upper }

random

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

{{ value|random }}

safe

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

{{ value|sage }}

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

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

  • 实例

    # urls.py
    path('safe/', views.safe_filter),
    
    # views.py
    
    def safe_filter(request):
        context = {
            "normal": "原样字符串

    aaa

    "
    , "url": "百度", } return render(request, "safe.html", context=context)
    {# safe.html #}
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>safetitle>
    head>
    <body>
        <h4>
            {{ normal|safe }}
            <br>
            {{ url|safe }}
        h4>
    body>
    html>
    
  • 运行

    Django2.0-templates(4)-模版过滤器_第5张图片


slice

类似python中的切片操作

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

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


striptags

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

{{ value|striptags }}

如果value

jack

,那么模板输出为jack


truncatechars

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

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

{{ value|truncatechar:number }}

truncatechars_html

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

你可能感兴趣的:(Django2.0,Django2.0,templates)