Jinja2转义过滤器运算符(“|”)

2024-04-26 01:38:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在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)”更好的解决方案——除非这是唯一可能的解决方案(或唯一推荐的解决方案)。在


Tags: injinja2forinput运算符some解决方案render
1条回答
网友
1楼 · 发布于 2024-04-26 01:38:53

不能使用Jinja2表达式中的|来操作Jinja2筛选器操作以外的任何操作。 使用{%%}或{}(依此类推)的每个语句都不是真正的python。它是一个Jinja语言,由Jinja解析并执行。您输入的每一段代码并不像您所想的那样被“evaluate”,但是即使是+也在Jinja2(github-Jinja2/parser.py#L450)的解析器模块中被解析和执行。因此,|是Jinja语法的一个标记,不能反转为它的python含义。在

你之所以可以调用你的方法是因为你的对象仍然是真实的,它们保留了所有的功能。您建议使用.union的解决方案是唯一可用的解决方案。在

仅供参考:在Jinja2中没有开放(或关闭)问题允许这样的可能性(如果我认为有可能会被拒绝)

相关问题 更多 >