有条件地应用 jinja2 过滤器
conditionally apply jinja2 filter
我想有条件地对一段文本应用过滤器。例如:
{% filter upper %}
some text
{% endfilter %}
更改为:
{% filter upper if X == 1 %}
some text
{% endfilter %}
也许那是不可能的,解决方案是 if/else 语句。然后“一些文本”将重复两次,一次用于“if”,一次用于“else”。这在一个小例子中很好。但是如果文本很长并且包含变量怎么办?因此,下一个选择是将“一些文本”移动到宏中。同样,如果文本中包含很多变量,则必须设置宏的所有参数,这会变得更加复杂。也许这些是唯一的选择。有没有一种方法可以简洁地结合条件和过滤器?
您可以使用自定义逻辑移动过滤器中的逻辑:
过滤器定义:
def custom_upper(text, X):
if X == 1:
return text.upper()
return text
environment.filters['custom_upper'] = custom_upper
模板:
{% filter custom_upper(X) %}
some text
{% endfilter %}
https://jinja.palletsprojects.com/en/2.11.x/api/#writing-filters
我想有条件地对一段文本应用过滤器。例如:
{% filter upper %}
some text
{% endfilter %}
更改为:
{% filter upper if X == 1 %}
some text
{% endfilter %}
也许那是不可能的,解决方案是 if/else 语句。然后“一些文本”将重复两次,一次用于“if”,一次用于“else”。这在一个小例子中很好。但是如果文本很长并且包含变量怎么办?因此,下一个选择是将“一些文本”移动到宏中。同样,如果文本中包含很多变量,则必须设置宏的所有参数,这会变得更加复杂。也许这些是唯一的选择。有没有一种方法可以简洁地结合条件和过滤器?
您可以使用自定义逻辑移动过滤器中的逻辑:
过滤器定义:
def custom_upper(text, X):
if X == 1:
return text.upper()
return text
environment.filters['custom_upper'] = custom_upper
模板:
{% filter custom_upper(X) %}
some text
{% endfilter %}
https://jinja.palletsprojects.com/en/2.11.x/api/#writing-filters