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

导读:本篇文章讲解 【django】过滤器和自定义过滤器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、过滤器语法

语法如下:

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

列举⼏个如下:

  • 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>

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74101.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!