【django】过滤器和自定义过滤器

一、过滤器语法

语法如下:

  • 使⽤管道符号 | 来应⽤过滤器,⽤于进⾏计算、转换操作,可以使⽤在变量、标签中。
  • 如果过滤器需要参数,则使⽤冒号:传递参数。
  • 变量 | 过滤器:参数

列举⼏个如下:

  • safe,禁⽤转义,告诉模板这个变量是安全的,可以解释执⾏
  • length,⻓度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
  • default,默认值,如果变量不存在时则返回默认值。
  • data | default:‘默认值’。
  • date,⽇期,⽤于对⽇期类型的值进⾏字符串格式化。

常⽤的格式化字符如下:

  • Y表示年,格式为4位,y表示两位的年。
  • m表示⽉,格式为01,02,12等。
  • d表示⽇, 格式为01,02等。
  • j表示⽇,格式为1,2等。
  • H表示时,24进制,h表示12进制的时。
  • i表示分,为0-59。
  • s表示秒,为0-59。
  • value | date:“Y年m⽉j⽇ H时i分s秒”

二.常⻅形式

使⽤形式为:{{ value | add: “2”}}:意义:将value的值增加2
使⽤形式为:{{ value | capfirst }} :意义:value的第⼀个字符转化成⼤写形式
使⽤形式为:
(a) {{ value | date:“Y-m-d h:i:s” }}
例如:如果value是⼀个datetime对象
(datetime.datetime.now()) 那么输出将是字符串"Wed 09 Jan 2008"
(b) {{ value | date }},这种形式没有格式化字符串,这时候,格式化字符串会⾃动采⽤DATE_FORMAT所设置的形式。
意义:将⽇期格式数据按照给定的格式输出

使⽤形式:{{ value | default: “nothing” }},例如,如果value是"",那么输出将是nothing
意义:如果value的意义是False,那么输出使⽤缺省值

使⽤形式:{{ value | divisibleby:arg}},如果value是21,arg是3,那么输出将是True
意义:如果value能够被arg整除,那么返回值将是True

使⽤形式:{{ value | first }}
意义:返回列表中的第⼀个Item,
例如,如果value是列表[‘a’,‘b’,‘c’],那么输出将是’a’。

使⽤形式:{{value | safe}} :进⾏HTML标签转换
意义:当系统设置autoescaping打开的时候,该过滤器使得输出不进⾏escape转换

使⽤形式:{{value | slugify}}
意义:将value转换成⼩写形式,同时删除所有分单词字符,并将空格变成横线
例如:如果value是how are you,那么输出将是how-are-you

使⽤形式:{{value | truncatewords:2}}
意义:将value切成truncatewords指定的单词数⽬
例如:如果value是how are you 那么输出将是:how are …

视图类

from django.views import View
from django.template import loader

class UserView(View):
 
    def put(self,request):
        content = {
            'clist':[1,2,3,4,5],
            'h1tag':'<h1>tag</h1>',
            'pub_date': datetime.strptime('2022-4-17', '%Y-%m-%d').date(),
            'value':22
        }
        return render(request, 'film/index1.html', content)

模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% for cnum in clist %}
        {{ cnum | add:'10' }}
    {% endfor %}

    <br>
    {{ h1tag | safe }}

    {{ pub_date | date:'Y-m-d' }}

    {{ value | divisibleby:3 }}

    {{ clist | first }}
</body>
</html>

响应结果:

在这里插入图片描述

三、自定义过滤器

实现步骤

1、在子应用下创建python package命名为templatetag(固定的)
2、在templatetag下创建python文件,命名myfilter.py(随意设置的)
3、myfilter文件中增加过滤器逻辑处理函数
4、模板页面顶部加载myfilter文件,{% load filter %}
5、在模板页面应用自定义过滤器

举例:
myfilter.py文件

from django.template.defaultfilters import register
import markdown

@register.filter(is_safe=False)
def add_arg(value, arg):
    """Add the arg to the value."""
    try:
        return int(value) + int(arg)
    except (ValueError, TypeError):
        try:
            return value + arg
        except Exception:
            return ''


@register.filter(is_safe=False)
def markdown_data(value):
    """
    markdown解析文本
    :param value:
    :return:
    """
    return markdown.markdown(value)

视图类

class UserView(View):
  
    def put(self,request):
        content = {
            'clist':[1,2,3,4,5],
            'h1tag':'<h1>tag</h1>',
            'pub_date': datetime.strptime('2022-4-17', '%Y-%m-%d').date(),
            'value':22,
            'mtag':'## 文集'
        }
        return render(request, 'film/index1.html', content)

模板文件

{% load myfilter %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    {% for cnum in clist %}
        {{ cnum | add_arg:'20' }}
    {% endfor %}

    {{ mtag | markdown_data | safe }}

</body>
</html>

响应结果:
在这里插入图片描述

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值