我想在模板上使用多个过滤器,如下所示:
value: {{ record.status|cut:"build:"|add:"5" }}
将构建record.status:n,0< N'LT; 100 但我想将此值添加为基值5.
我试过上面的代码,它只对第一个过滤器生效, 所以我没有得到加上5的值。
django只支持一个过滤器吗? 感谢
答案 0 :(得分:4)
首先,你的问题的答案“django只支持一个过滤器吗?”就是它
Django确实支持几乎无限的数量的链式过滤器(取决于您的平台和当然编写该数量的链式过滤器的能力=)。以一些代码为例(不是证明但有意义),它实际上是一个模板'{{ x|add:1|add:1|...10000 in all...|add:1 }}'
>>> from django.template import *
>>> t = Template('{{ x|'+'|'.join(['add:1']*10000)+' }}')
>>> t.render(Context({'x':0}))
u'10000'
其次,请检查模板以确保您使用的内置版cut
和add
;还要检查cut
之后的输出值,以确保它可以被强制转换为int而不会引发异常
我刚检查过,发现连Django 0.95都支持这种用法:
def add(value, arg):
"Adds the arg to the value"
return int(value) + int(arg)
答案 1 :(得分:1)
支持链接过滤器。如果你想弄清楚为什么它不起作用,那么我要做的是:
更简单的方法是make your own template filter。它可能看起来像
from django.template import Library
register = Library()
@register.filter
def cut_and_add(value, cut, add):
value = value.replace(cut, '')
value = int(value) + add
return value
假设您将其保存在yourapp/templatetags/your_templatetags.py
中(并且yourapp/templatetags/__init__.py
存在 - 它可以为空)。然后你会在模板中使用它:
{% load your_templatetags %}
{{ record.status|cut_and_add:"build:",5 }}
当然,这是未经测试的伪代码。但是只需付出一点努力就可以让它发挥作用。