Jinja2模版语言自定义filter的使用
2013-08-14 21:52
169 查看
Jinja2模版语言,自带有一些filter,能够在前端的模版中控制数据按照相应的方式显示。比如以下两种filter,分别能在前端控制数字的近似精度显示和根据字符串长度补齐:
但是,有时候自带的filter的灵活性有限,不能满足我们的要求,这时候便用到了自定义filter。在查找自定义filter相关资料的时候,还是能找到一些。可以根据这些资料了解到,实际上,filter是相应函数的调用。自定义filter之需要做两项工作:一是写一个filter函数;在当前环境中注册filter。
filter函数的第一个参数,是在模版中运用filter的html模版成分。这里我们实现的是一个要将字符串末尾的数字不显示的功能,为此,要写如下filter函数:
ps:你可能会问,filter的定义和注册应该放在哪儿呢?放在哪个文件中实现呢?其实,很简单,放在项目app目录下的 __init__.py文件中就行。(这里的web框架用的是flask。)
round(value, precision=0, method='common') {{ 42.55|round }} -> 43.0 {{ 42.55|round(1, 'floor') }} -> 42.5 truncate(s, length=255, killwords=False, end='...') {{ "foo bar"|truncate(5) }} -> "foo ..." {{ "foo bar"|truncate(5, True) }} -> "foo b..."
但是,有时候自带的filter的灵活性有限,不能满足我们的要求,这时候便用到了自定义filter。在查找自定义filter相关资料的时候,还是能找到一些。可以根据这些资料了解到,实际上,filter是相应函数的调用。自定义filter之需要做两项工作:一是写一个filter函数;在当前环境中注册filter。
filter函数的第一个参数,是在模版中运用filter的html模版成分。这里我们实现的是一个要将字符串末尾的数字不显示的功能,为此,要写如下filter函数:
import re def rm_num_at_end(name): result=re.sub("\s\d+$","",name) return result然后在环境中注册该filter,代码如下:
env=app.jinja_env env.filters['rm_end_num'] = rm_num_at_end这样,便生成了一个新的自定义的filter。然后,我们就可以像使用Jinja2自带的filter一样使用该filter了。(这里,有的字符串末尾有空格,后面跟一个数字,该filter实现的是不显示字符串末尾的空格和数字。)
ps:你可能会问,filter的定义和注册应该放在哪儿呢?放在哪个文件中实现呢?其实,很简单,放在项目app目录下的 __init__.py文件中就行。(这里的web框架用的是flask。)
相关文章推荐
- Jinja2模版语言自定义filter的使用
- Django创建自定义filter来使用bootstrap
- Django模版语言自定义标签-实现前端 关联组合过滤查询
- sharepoint 2010 使用自定义列表模版创建列表(1)
- 使用java的自定义过滤器Filter 处理请求request 并响应response
- 卷积,使用filter2D创建自定义线性滤波器
- springboot集成Shiro,添加自定义filter后shiro的默认filter无法使用
- 使用自定义模板来弥补eclipse没有新建Filter的功能
- c 语言中自定义Handel使用
- 在Django中自定义filter并在template中使用
- sharepoint 2010 使用自定义列表模版创建列表(2)
- 使用自定义模板为Myeclipse添加新建Filter的功能
- AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
- Flask的jinja2模板中自定义过滤器的使用
- django使用jinja2模版引擎
- struts2.1.3之后使用自定义Filter
- 利用增加自定义样式的办法来修正卖家使用模版过程中的不足
- 使用SublimeTmpl 自定义模版
- Eclipse中使用自定义模板来弥补Myeclipse没有新建Filter的功能
- django - 自定义jinja2的tag与filter