使用Django过滤器作为变量

时间:2012-05-02 21:03:08

标签: django

我想知道我们是否可以使用django过滤器作为变量,其中python方法格式化文本可以设置可以由模板呈现的过滤器值

过滤器的常用方式是这样的

{{html_text |安全}}或{{plain_text | linebreaks}}

我想在变量中设置过滤器'safe'/'linebreaks'的值,然后像这样渲染

{{text | filter_variable}}

在线研究,但无法弄明白,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:1)

我是克里斯普拉特所说的第二个,但我会这样做:

from django.template import defaultfilters

@register.filter
def apply_filter(value, filter):
    return getattr(defaultfilters, filter)(value)

这种方式适用于任何过滤器。

答案 1 :(得分:0)

您不能这样做,但可以创建一个接受参数的自定义过滤器:

from django.template import defaultfilters

@register.filter
def apply_filter(value, filter):
    if filter == 'safe':
       return defaultfilters.safe(value)
    if filter == 'linebreaks':
       return defaultfilters.linebreaks(value)
    else:
       # You might want to raise an exception here, but for example purposes
       # I'll just return the value unmodified
       return value

然后,在您的模板中:

{{ text|apply_filter:filter_variable }}

答案 2 :(得分:0)

如果你有一些过滤器,这是有效的:

{% ifequal filter_variable 1 %}{{ text|safe }}{% endifequal %}
{% ifequal filter_variable 2 %}{{ text|linebreaks }}{% endifequal %}
{% ifequal filter_variable 3 %}{{ text|yourfilter }}{% endifequal %}