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

      add

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")
    
    <!-- cut.html-->
    <!DOCTYPE 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)
<!-- date.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>date</title>
</head>
<body>
    <h3>
        {{  day|date:"Y/n/j g:i:s" }}
    </h3>
</body>
</html>
  • 运行

    date

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)
<!-- floatformat.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>floatformat</title>
</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>
  • 运行

    floatformat

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)
    
    <!-- join.html -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>join</title>
    </head>
    <body>
        {{ value|join:'+' }}
    </body>
    </html>
    
  • 运行

    join


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": "原样字符串<h1>aaa</h1>",
            "url": "<a href='http://www.baidu.com'>百度</a>",
        }
        return render(request, "safe.html", context=context)
    
    {# safe.html #}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>safe</title>
    </head>
    <body>
        <h4>
            {{ normal|safe }}
            <br>
            {{ url|safe }}
        </h4>
    </body>
    </html>
    
  • 运行

    safe


slice

类似python中的切片操作

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

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


striptags

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

{{ value|striptags }}

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


truncatechars

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

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

{{ value|truncatechar:number }}

truncatechars_html

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值