Django中的过滤器

创建项目工程下的所有文件如下:

设置文件内需要注册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 %}

显示结果如下:

猜你喜欢

转载自blog.csdn.net/qq_39138295/article/details/82666536