django2.0自定义模板标签和过滤器


发布时间:2019-02-26 07:34    作者: Uncle Hui   已过去:1 年,1 月   阅读总量:517 已被赞:3


为什么要自定义标签或过滤器呢?

django内置了很多过滤器,基本够我日常使用了,但有的时候,需求比较特殊,就需要自定义一个过滤器或标签

标签和过滤器的定义

什么叫过滤器:

    1.可以通过过滤器来修改变量的显示,过滤器的形式是:{{ variable | filter }},管道符号'|'代表使用过滤器
    2.过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}
    3.过滤器还可以带参数,例如: {{ bio|truncatewords:30 }}
    4.过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}
什么叫标签:

    1.标签的形式是:{% tag %},标签要比变量复杂
    2.标签的作用
      (1)在输出时创建一些文本
      (2)通过执行循环和一些逻辑来实现控制流
      (3)装载一些外部信息进入模板
    例如内建标签  block
         使用形式:
             {% block %}
                 (定义块内容)
             {% endblock %}
         意义:定义一个块,该块能够被继承他的子孙模板重写

如何自定义标签和过滤器呢?首先来看如何自定义过滤器吧!

自定义过滤器的步骤:

第一步:过滤器是定义在项目的APP里的,所以我们确定一个需要使用过滤器的APP,在其根目录下新建一个python包

比如:我在blog2019这个项目下的blog这个APP里新建一个python包(含有__init__.py 的才叫python包)

blog2019/blog/:

python包的名字只能叫:templatetags.py

第二步:在templatetags.py/下新建一个py文件,名字自定义

如:sql_list.py

第三步:在sql_list.py/这个文件夹里编写我们自定义的过滤

如:

from django import template  #引入
register = template.Library() #必须实例化这个对象,提交给register

#利用装饰器注册这个过滤器
@register.filter  #这个是过滤器的装饰器
def sql(x,y):
    x = int(x)
    y = int(y)
    c = x**y
    return c

说明:过滤器最多只能传入两个参数,管道符号|前的变量是一个,函数冒号后面是一个

第四步如何使用:

1.在需要使用的html模板顶部 load自定义的py文件名字

如:

{% load sqr_list %}

2.怎么用

如:我后台传来一个变量p=20

<p>{{ p|sql:2}}</p>

结果:400  这里就相当于x=20,y=2,20的2次幂就是400 

更复杂的过滤器就看后端代码的实现了,流程就走完了,下步我再学习自定义标签。

自定义标签:

自定义标签和自定义过滤器方法基本完全一样,只是在使用的装饰器不同:

#注册一个标签
@register.simple_tag
def  zdytag(x,y,z): #这个是标签的装饰器
    return x+y+z
自定义标签可以写多个参数

前端使用:

和过滤器的使用一样,先load 自定义的py文件名,然后用{%  %} 使用

<p>{% zdytag 2 3 4 %}</p>  这里分别传入 2  3  4  这三个参数,相当于x=2,y=3,z=4

点赞

3




登陆后方可评论