Django~~(自定义过滤器的简单使用)
在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是个方法 别忘了加"()"
感谢阅读!!
语句欣赏:
聪明在于勤奋,天才在于积累。