前言


  Django和Flask框架中都使用了jinja2模板引擎来渲染模板,通过后端向模板中传递变量,通过过滤器可以修改这些变量,过滤器添加在变量名之后,中间使用竖线分割。
例如:把值的首字母转换为大写,其他字母转换为小写
{{ name|capitalize }}
下表列出jinjia2部分的常用过滤器

过滤器 说明
safe 渲染时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染前把值中所有的HTML标签都删掉
自定义过滤器

  很多时候我们可能会想对变量做出其他的操作,而已有的过滤器达不到我们想要的功能,这时候就需要我们自定义过滤器了。

  自定义过滤器的过程其实就是写一个函数,这个函数至少有一个参数作为被过滤的内容,即竖线左边的变量,其他的参数则需要传入

应用:

  可能我的例子不是很恰当,这里只作为帮助理解过滤器的使用。

(1)先以Flask为例:

首先定义两个计算面积的装饰器:
def square(side): # 求正方形面积 return side*side def rectangle(width,height): #
求矩形面积 return width*hight
模板中的应用:
正方形面积:{{ s|square }} 矩形面积: {{ s|rectangle(2) }}
  可以看到第一个过滤器中我们直接使用了过滤器名称(即函数名称),第一个参数默认即左边传来的变量。
  在使用第二个过滤器时,我们只传递了一个参数,实际我们传递的是过滤器中的第二个参数,当然,你还可以继续在后面追加更多的参数。

(2)Django中的例子:

  在Django中定义过滤器比Flask多了一些步骤。

*

首先在你的任意app内创建一个python包(就是创建之后里面就有一个init.py文件),然后在这个包下创建一个py文件,名称可以自定义(注意不要和其他文件重名),此时我就定义为myfilters.py

*
为了让我们自定义的模板和过滤器可用,django要求我们自定义的标签和过滤器必须在django中进行注册。在上述文件中添加如下代码:
from django import template register = template.Library()
*
仍然使用上面Flask中定义的装饰器,但区别是需要加上第二部的register作为装饰器:
@register.filter def square(side): # 求正方形面积 return side*side @register.filter
def rectangle(width,height): # 求矩形面积 return width*hight
*
在模板中的应用,和Flask的区别不大,但首先需要引入第二步定义的文件名,即{% load myfilters
%},然后其他的区别就是再有多个参数时使用冒号+参数的形式传递。参数有很多的情况,在冒号后面使用逗号隔开
矩形面积: {{ s|rectangle:2 }}

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信