jinja2变量过滤器

前言

  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多了一些步骤。

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

  2. 为了让我们自定义的模板和过滤器可用,django要求我们自定义的标签和过滤器必须在django中进行注册。在上述文件中添加如下代码:

    from django import template
    register = template.Library()
    
  3. 仍然使用上面Flask中定义的装饰器,但区别是需要加上第二部的register作为装饰器:

    @register.filter
    def square(side):
        # 求正方形面积
        return side*side
    
    @register.filter
    def rectangle(width,height):
        # 求矩形面积
        return width*hight
    
  4. 在模板中的应用,和Flask的区别不大,但首先需要引入第二步定义的文件名,即{% load myfilters %},然后其他的区别就是再有多个参数时使用冒号+参数的形式传递。参数有很多的情况,在冒号后面使用逗号隔开

    矩形面积:  {{ s|rectangle:2 }}
    
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值