Django~~(自定义过滤器的简单使用)

本文介绍了在Django中创建和使用自定义过滤器的步骤,包括设置templatetags文件夹,注册过滤器,编写filter.py文件,以及在模板中应用过滤器的注意事项。强调了模板语法的严谨性,特别是空格和参数传递的规则,提醒开发者避免错误的使用方式。
摘要由CSDN通过智能技术生成

在Django中使用自定义过滤器有很多小细节和注意点,它与flask中的自定义过滤器大不相同:
在自定义过滤器之前,我们必须先在我们的项目下建一个templatetags文件夹:

在这里插入图片描述

然后在settings.py中把templatetags目录作为mysite(自己的项目名称)注册

在这里插入图片描述
如何在templatetags文件夹下建一个写过滤器的py文件,入filter.py

在filter.py文件中写出自己定义的过滤器:

#导入模板模块
from django import template

#注册过滤器对象
register = template.Library()

#自定义过滤器
#在django内部,通过装饰器的方式来注册自定义过滤器
@register.filter
def my_str(val):
    return '$' + str(val)


#定义一个双参数的过滤器
@register.filter
def my_str_too(val,p1):
    return str(val) + str(p1)

#定义一个多参数的过滤器
#注册过滤器的时候,需要注册simple_tag
@register.simple_tag
def my_str_many(val,p1,p2):
    return val + p1 +p2

#定义一个取余数的过滤器
@register.filter
def get_line(val):
    return int(val) % 2

定义好之后我们在模板传递几个参数:

#导包
from django.http import HttpResponse,HttpResponseRedirect
#导内置模板方法
from django.shortcuts import render

#定义视图方法
def index(request):
    test_str = '你好,这里是首页'
    test_list = [1,2,3,4,5,6]
    test_int = 1000
  
    #使用locals()方法,可以将和视图方法内所有的变量默认传参
    return render(request,'d3_index.html',locals())

然后在模板内使用过滤器:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

</head>
<body>
    {# 导入过滤器文件 #}
    {% load my_filter %}
    {{test_str|my_str}}
    <br>
    {# 两个参数进行调用#}
    {{'你好'|my_str_too:'不'}}
    <br>
    {# 调用多参数的过滤器#}
    {% my_str_many '你好' '不好' '啊' %}
  

简单的自定义过滤器就定义完成了。这里说这个注意点:
django中模板的语法特别严谨,不要随意使用空格键,
如:
正确的:

    {{test_str|my_str}}

错误的:

    {{test_str | my_str}}

多数传参千万不要用逗号相隔:
正确:

 {% my_str_many '你好' '不好' '啊' %}

错误:

 {% my_str_many '你好' ,'不好', '啊' %}

为了简易我们使用locals()方法传参,在传参的时候一定要记住locals是个方法 别忘了加"()"

感谢阅读!!
语句欣赏:
聪明在于勤奋,天才在于积累。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值