1

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

过滤器通常的工作方式是这样的

{{ html_text | 安全 }} 或 {{ plain_text | 换行符 }}

我想在变量中设置过滤器“安全”/“换行符”的值并像这样呈现

{{ 文字 | 过滤变量}}

网上查了下,没搞明白,求帮助。

4

3 回答 3

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 }}
于 2012-05-02T21:16:16.907 回答
0

如果您有几个过滤器,则此方法有效:

{% ifequal filter_variable 1 %}{{ text|safe }}{% endifequal %}
{% ifequal filter_variable 2 %}{{ text|linebreaks }}{% endifequal %}
{% ifequal filter_variable 3 %}{{ text|yourfilter }}{% endifequal %}
于 2012-05-02T21:16:49.260 回答
0

我赞同克里斯普拉特所说的,但我会这样做:

from django.template import defaultfilters

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

这样它适用于任何过滤器。

于 2012-05-02T21:23:15.670 回答