Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有条件地应用jinja2过滤器_Python_Jinja2_Templating - Fatal编程技术网

Python 有条件地应用jinja2过滤器

Python 有条件地应用jinja2过滤器,python,jinja2,templating,Python,Jinja2,Templating,我想有条件地对文本的某一部分应用过滤器。例如: {% filter upper %} some text {% endfilter %} 对以下内容的更改: {% filter upper if X == 1 %} some text {% endfilter %} 也许这是不可能的,解决方案是if/else语句。然后,“some text”将重复两次,一次用于“if”,一次用于“else”。在一个小例子中,这很好。但是如果文本很长并且包含变量怎么办?因此,下一个选择是将“一

我想有条件地对文本的某一部分应用过滤器。例如:

{% filter upper %}
    some text
{% endfilter %}
对以下内容的更改:

{% filter upper if X == 1 %}
    some text
{% endfilter %}

也许这是不可能的,解决方案是if/else语句。然后,“some text”将重复两次,一次用于“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 %}
模板:

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 %}

太棒了!非常感谢。