jinja2 带有三个花括号,不包含额外的空格

Joh*_*ohn 6 python latex jinja2

如果插入空格,Jinja2 会正确呈现三个彼此相邻的大括号,如下面的案例 1 所示。但是,如果没有空格,则会引发异常,如下例 2 所示。此处的空白区域用红条表示。

是否可以渲染不包含空格的输出,即渲染类似的输出\textbf{Hello, World!}

jinja2 对于三个没有空格的大括号抛出异常

下面列出了一个Python代码示例

from jinja2 import Template


template_1 = Template(r"\textbf{ {{msg}} }")

#template_2 = Template(r"\textbf{{{msg}} }") # Throws an exception

msg = "Hello, World!"

out_1 = template_1.render({'msg':msg})
#out2 = template_2.render({'msg':msg}) # FAILS!


print(out_1)
Run Code Online (Sandbox Code Playgroud)

输出

\textbf{ Hello, World! }
Run Code Online (Sandbox Code Playgroud)

我想要的是

\textbf{Hello, World!}
Run Code Online (Sandbox Code Playgroud)

小智 8

您是否尝试过在 {{ 之后和 }} 之前添加“-”?

template_2 = Template(r"\textbf{ {{-msg-}} }")
Run Code Online (Sandbox Code Playgroud)

这将删除空格。因此,您可以将单/双花括号之间的空格保留到模板中,并在渲染期间 Jinja2 删除它们。


小智 5

我发现的最好的解决方案是使用{% raw %}标签来专门包含一个大括号:

template_1 = Template(r"\textbf{% raw %}{{% endraw %}{{msg}}{% raw %}}{% endraw %}")
Run Code Online (Sandbox Code Playgroud)

这将呈现

\textbf{Hello, World!}
Run Code Online (Sandbox Code Playgroud)

如预期的。