在jinja2中,运算符|
用作过滤,例如{{ user_input | safe }}
。但是,|
也是一个有效的python运算符,比如按位或、set union等
{% for elem in (set1 | set2) %} elem.render_some_string() {% endfor %}
Jinja抛出了一个例外
^{pr2}$这是可以理解的。但是有没有一种方法可以解决这个问题,比如告诉jinja不要将|
操作符解释为过滤器?我希望有一个比“用set1.union(set2)
替换(set1 | set2)
”更好的解决方案——除非这是唯一可能的解决方案(或唯一推荐的解决方案)。在
不能使用Jinja2表达式中的}(依此类推)的每个语句都不是真正的python。它是一个Jinja语言,由Jinja解析并执行。您输入的每一段代码并不像您所想的那样被“evaluate”,但是即使是
|
来操作Jinja2筛选器操作以外的任何操作。 使用{%%}
或{+
也在Jinja2(github-Jinja2/parser.py#L450)的解析器模块中被解析和执行。因此,|
是Jinja语法的一个标记,不能反转为它的python含义。在你之所以可以调用你的方法是因为你的对象仍然是真实的,它们保留了所有的功能。您建议使用
.union
的解决方案是唯一可用的解决方案。在仅供参考:在Jinja2中没有开放(或关闭)问题允许这样的可能性(如果我认为有可能会被拒绝)
相关问题 更多 >
编程相关推荐