Django中的过滤器
程序员文章站
2022-03-10 16:53:02
...
还是和以前一样,新建一个项目,设置里面的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>
最终,看一下效果图,和各自的对比
上一篇: java web 下载
下一篇: 过滤器