Django中的过滤器

本文介绍了在Django中创建和使用过滤器的步骤,包括新建templatetags目录,编写myfilter.py文件定义过滤器函数,以及在views和模板中应用过滤器。示例展示了内置过滤器`upper`的使用,并详细讲解了如何解决可能出现的错误问题,以及自定义过滤器的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是和以前一样,新建一个项目,设置里面的settings 文件,views 文件,urls 文件,
不同的是,这次我们在myApp 文件夹里新建一个文件夹:templatetags, 在该文件夹下新建两个py文件:
一是init.py 表示这是一个模块包
二是: myfilter.py 这文件里将要写我们的过滤器函数
这里写图片描述

首先在views.py 文件中配置如下:
通过对str的操作来认识过滤器的用法

from django.shortcuts import render

def index(request):
    str = 'ABCDEFGhigklmn'
    return render(request, 'index.html', {'content': str})

接着在myfilter文件中进行如下配置

from django.template import Library

register = Library()

在index.html 文件中进行如下配置,注意首先要引入

{% load myfilter%}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>{{content | upper }}</h1>
</body>
</html>

得到的效果如图
这里写图片描述

竖线表示使用过滤器函数,upper 为其内置函数,将所有字母变为大写,还有其他的内置函数,可以简单的了解一下,
更多是一会我们自己定义过滤器函数
这里写图片描述

注意!!!!!!!!!!

注意!!!!!!!!!!

若是出现下面的错误,而且代码检查好几遍都没有问题的话,将Pycharm重启,或者重启电脑
这里写图片描述

下面介绍自定义过滤器函数

首先给出myfilte文件及内容:

from django.template import Library

register = Library()




# 过滤器后面写过滤器的名字
# 如果不写, 默认为函数名字 ,一般都不写
# @register.filter(name='XX')
@register.filter
def add(value):
    return value + '-------'

@register.filter
def change_length(value):
    if len(value) > 10:
        return value[0:10] + '------'
    else:
        return value

import datetime
@register.simple_tag
def get_current_time():
    time = datetime.datetime.now()
    time = time.strftime('%Y-%m-%d %H:%M:%S')
    return '<h1>{}</h1>'.format(time)

# 注册标签
@register.simple_tag
def my_tag(value1, value2):
    if value1 == 'a':
        return '<a href="https://www.baidu.com">百度</a>'
    if value2 == 'b':
        return '<a href="https://www.jd.com">京东</a>'

然后是Index.html 文件

{% load myfilter %}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>{{content}}</h1>
    <h1>{{content | upper }}</h1>
    <h1>{{content | add }}</h1>
    <h1>{{content | change_length }}</h1>

    {# 自定义标签 会被Django 内部的安全机制定义为 #}
    {# 非法内容 因此默认对自定义标签使用了转义 #}
    {# 让浏览器认为它是一个普通文本 #}


    {% autoescape off %}
        {% get_current_time %}
    {% endautoescape %}




    {% autoescape off %}
        {% my_tag 'a' 'b' %}
    {% endautoescape %}

</body>
</html>

最终,看一下效果图,和各自的对比
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值