我想知道我们是否可以使用django过滤器作为变量,其中python方法格式化文本可以设置可以由模板呈现的过滤器值
过滤器的常用方式是这样的
{{html_text |安全}}或{{plain_text | linebreaks}}
我想在变量中设置过滤器'safe'/'linebreaks'的值,然后像这样渲染
{{text | filter_variable}}
在线研究,但无法弄明白,任何帮助都会受到赞赏。
答案 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 %}