欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django中的过滤器

程序员文章站 2022-03-10 16:53:02
...

还是和以前一样,新建一个项目,设置里面的settings 文件,views 文件,urls 文件,
不同的是,这次我们在myApp 文件夹里新建一个文件夹:templatetags, 在该文件夹下新建两个py文件:
一是init.py 表示这是一个模块包
二是: myfilter.py 这文件里将要写我们的过滤器函数
Django中的过滤器

首先在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>

得到的效果如图
Django中的过滤器

竖线表示使用过滤器函数,upper 为其内置函数,将所有字母变为大写,还有其他的内置函数,可以简单的了解一下,
更多是一会我们自己定义过滤器函数
Django中的过滤器

注意!!!!!!!!!!

注意!!!!!!!!!!

若是出现下面的错误,而且代码检查好几遍都没有问题的话,将Pycharm重启,或者重启电脑
Django中的过滤器

下面介绍自定义过滤器函数

首先给出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>

最终,看一下效果图,和各自的对比
Django中的过滤器

相关标签: Django 过滤器

上一篇: java web 下载

下一篇: 过滤器