Django2.0 自定义过滤器

  自定义过滤器需要先创建模板库,创建模板库分两步:

  1. 决定模板库放到哪个目录下,可以放在一个应用(app)下,也可以将模板库放在一个模板库放在一个单独的应用下,推荐使用后者,方便在其他应用中使用。不管采用那种方式,都需要将该应用添加到INSTALLED_APPS中

  2. 在模板库所在应用下新建一个templatetags目录,这个目录与models.py、views.py处于同一层次

      本人通过startapp在项目下新建了一个应用用于存放自定义模板文件,其目录格式如下所示:

      

    自定义过滤器目录结构


      然后在templatetags目录下,创建两个空文件(init.py和存放自定义过滤器的文件),其中init.py告诉Python这是一个包含了Python代码的包,如上图所示,这里我创建的存放自定义过滤器内容的文件为custom_template.py

      作为合法的标签库,模块需要包含一个名为register的模块级变量,这个变量是template.Library的实例,是所有注册标签和过滤器的数据结构。所以需要在模块存放自定义文件的顶部插入如下语句:

    from django import template
    
    register = template.Library()
    

  做完这些准备工作后,接下来就可以创建自定义过滤器了。自定义过滤器就是有一个或两个参数的Python函数:

  1. (输入)变量的值

  2. 参数的值,可以是默认值或者完全留空

    例如,在过滤器{{ var | foo:"bar" }}中,过滤器foo会被传入变量var和参数bar

      以一个去掉变量值空格的过滤器为例,在custom-template.py中定义一个处理函数:

    def remove_space(value, arg):
        return value.replace(arg, '')
    

  定义完过滤器后,还需要用Library实例来注册它:

#Library.filter()方法接受两个参数:过滤器名称和过滤器函数本身
register.filter('remove_space', remove_space)

  至此,就可以通过{% load custom_template %}加载过滤器,然后在模板文件中使用:

{% load custom_template %}
{{ message | remove_space:' ' }}

  假设传入的message为"custom template",则 {{ message | remove_space:' ' }}输出为"customtemplate"

  END!

你可能感兴趣的:(Django2.0 自定义过滤器)