文章内容

2024/4/21 23:56:01,作 者: 黄兵

Flask Jinja2 模板转义相关问题

最近在使用 Flask 编写网站,Jinja2 作为 html 渲染模板,但是有一些 markdown 示例显示存在一些问题,具体代码如下:

<li>Embed rich content such as Tweets, YouTube videos, etc. Use the complete URL: <code>{% embed https://... %}.</code> <a href="#liquid">See a list of supported embeds</a>.</li>

如果 html 页面存在这段代码会出现如下错误:

jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'embed'. Jinja was looking for the following tags: 'endblock'. The innermost block that needs to be closed is 'block'.

出现上面错误的原因:

由于 Jinja2 将 {% embed %} 当成一个指令渲染才会出现上面问题。

解决方案:

修改代码如下:

<li>Embed rich content such as Tweets, YouTube videos, etc. Use the complete URL: <code>{% raw %}{% embed https://... %}.{% endraw %}</code> <a href="#liquid">See a list of supported embeds</a>.</li>

这样做可以告诉 Jinja2 忽略这部分代码,不进行解析,从而避免出现模板解析错误。

{% raw %} 的作用:

当我们在 Jinja2 模板中使用 {% raw %}{% endraw %} 标签时,它告诉 Jinja2 不要解析这两个标签之间的内容,而是将它们视为原始的文本内容,直接输出到最终的 HTML 页面中。

这个功能在以下情况特别有用:

  1. 避免 Jinja2 解析: 有时候,你可能会在 Jinja2 模板中包含一些特殊的代码块,但是这些代码块与 Jinja2 的语法冲突,导致 Jinja2 报错。在这种情况下,你可以使用 {% raw %}{% endraw %} 包裹这些代码块,告诉 Jinja2 不要解析它们,而是直接输出到 HTML 页面中。

  2. 保留原始格式: 如果你需要在模板中显示一些代码示例或其他特殊格式的文本,你可能希望保留这些内容的原始格式,而不希望 Jinja2 对其进行处理。在这种情况下,你可以使用 {% raw %}{% endraw %} 来确保这些内容保持原样,不受 Jinja2 的影响。



分享到:

发表评论

评论列表