创建项目工程下的所有文件如下:
设置文件内需要注册app和设置templates的文件夹路径。
myfilter.py文件内是过滤器的函数设置。
urls.py文件内的代码如下:
from django.contrib import admin from django.urls import path from myApp import views urlpatterns = [ path('admin/', admin.site.urls), path('index/',views.index) ]
views.py文件设置内容,代码如下:
from django.shortcuts import render # Create your views here. def index(request): str='ABCDEFGhijklmn' return render(request,'index.html',{'content':str})
过滤器在myfilter.py文件内设置,然后在界面index.html上显示。
我们先在index.html界面上显示一下没有过滤器的效果:
下面我们添加一个系统自带的过滤器来看看效果:
<h1>{{content | upper}}</h1>
界面显示结果如下:
我们可以看出,这个过滤器是把所有的小写字母过滤,改为大写字母。
下面我们来自己写一个过滤器,尝试一下。
来到myfilter.py文件内:
from django.template import Library register = Library() # 过滤器写过滤器名字,如果不写,默认为后面函数的名字 # @register.filter(name='XX') @register.filter def add(value): return value+'--------'
这是我们写的第一个过滤器。
在写过滤器之后,我们要先在index.html文件内引入过滤器的文件:
{% load myfilter %}
有时候会给我们报这样一个错误:
'myfilter' is not a registered tag library. Must be one of:
解决方法有两个:
第一:将程序关闭,电脑注销重新启动一下。
第二:在设置文件中添加这样一行代码:
'libraries':{ 'test':'myApp.templatetags.myfilter' },
刷新页面就可以正常显示了。
此时,我们再来到index.html文件内,进行过滤器的使用。
代码如下:
<h1>{{content | upper |add}}</h1>
显示结果如下:
注册标签的过滤器:
# 注册标签--------------------------------- @register.simple_tag def myTag(value1,value2): if value1 == 'a': return '<a href="https://baidu.com">雄霸</a>' if value2 == 'b': return '<h1>天下</h1>'
在index.html文件内的使用:
{# 自定义标签 会被django内部的安全机制定义为非法内容,因此默认对自定义标签使用了转义 ,让浏览器认为它是一个普通文本 #} {# 关闭自动转义 #} {% autoescape off %} {% myTag 'a' 'b' %} {% endautoescape %}
显示结果如下:
这是一个可以点击的a标签。
下面我们再尝试直接调用过滤器的函数方式:
过滤器代码如下:
@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)
index.html使用代码如下:
{% autoescape off %} {% get_current_time %} {% endautoescape %}
显示结果如下: