

Jinja2 和 JavaScript 模板引擎语法冲突处理
source link: https://greyli.com/jinja2-and-js-template/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Jinja2 有三种定界符语法:
{{ ... }}
用来标记变量;{% ... %}
用来标记语句;{# ... #}
用来标记注释;
如果你同时使用了 JavaScript 模板引擎,而该 JavaScript 模板引擎也使用相同的语法标记符,那就会产生冲突。一般来说,有下面三种兼容性处理方式:
1. 使用 Jinja2 的 raw 标签标记 JavaScript 模板代码
第一种方式最直观,使用 Jinja2 的 raw 标签声明原生代码块,也就是不需要进行后端渲染的代码块。使用 raw
和 endraw
标签把 JavaScript 模板部分标记出来即可,比如:
这种方式的副作用最少,尽管需要多几行代码,但不会影响你写 Jinja2 或其他 JavaScript 库的语法习惯。
2. 修改 Jinja2 的语法定界符号
第二种方式是修改 Jinja2 的语法定界符号,一般只修改变量定界符即可,其他的按需修改。具体通过修改程序实例的下面几个属性来实现:
3. 修改 JavaScript 模板的语法定界符号
第三种方式是修改 JavaScript 模板的语法定界符号,具体方法因 JavaScript 模板/框架而异,可以参见相关文档了解。以 Vuejs 为例,下面将模板定界符改为中括号:
如果你觉得使用 raw
标签太麻烦,而修改语法定界符又不习惯,这里还有一个折中方法:两边都使用双花括号作为定界符,但根据花括号内部是否添加空格来进行区分。
具体来说,对 Jinja2 变量使用 Jinja2 标准语法,也就是使用 {{
作为变量开始符号,注意花括号右侧有一个空格,结束符号类似,需要在花括号左侧加入一个空格,即 }}
。实际示例如下:
而 JavaScript 模板使用没有空格的双花括号,即:
这是一种更适合心细的懒人的方法,如果是团队项目,可能会对不习惯这种用法的人造成困扰,记得在文档里注明。这种方式只需要修改 Jinja2 定界符:
另外需要注意的是,如果你使用了其他 Flask 扩展的内置 Jinja2 模板或宏,需要确保它们都使用了包含空格的标准 Jinja2 语法。举例来说,用来方便集成 Bootstrap 的 Flask-Bootstrap 就没法使用,需要使用替代的 Bootstrap-Flask。其他扩展,比如 Flask-Admin,Flask-Security 暂未测试,欢迎了解的同学反馈兼容情况。
Recommend
-
100
Flask jinja2模板注入思路总结
-
17
利用 Python 特性在 Jinja2 模板中执行任意代码 RickGray...
-
69
-
26
Flask 和 Django,以及其它很多 Python 框架如 Ansible,都默认使用 Jinja2 来作为模版引擎。我们用 Jinja2 在服务器上直接生成配置和其他文件。 Jinja 是一个基于 Python 设计语言的“全功能模板引擎”,个人认为 Jinja 语法本身并不复杂,...
-
16
Flask和Django,以及其它很多Python框架如Ansible,都默认使用Jinja2来作为模版引擎。我们用Jinja2在服务器上直接生成配置和其他文件。 Jinja是一个基于...
-
24
Jinja是组成Flask的模板引擎。可能你还不太了解它是干嘛的,但你对下面这些百分号和大括号肯定不陌生: {% block body %} <ul> {% for user in users %} <li><a href="{{ us...
-
12
基础配置篇:博客模板的格式语法和后端如何传递数据到模板逻辑 前面的章节中,我们选择了使用 iris.Django 作为我们前端使用的模板引擎,因此我们这里只介绍它的相关语法。 在网络上,关于 Dja...
-
15
Flask简介 Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一...
-
6
Djinn:一个受 Jinja2 启发的代码生成器和模板语言-51CTO.COM Djinn:一个受 Jinja2 启发的代码生成器和模板语言 作者:Simon Arneaud 2022-07-04 10:40:35 我决定制作一个类似于 Ji...
-
8
Jinja2简介 Jinja2 是由 Armin Ronacher 开发的,这位开发者也是 Flask 和 Werkzeug 等著名 Python 项目的作者。Jinja2 的设计受到了 Django 模板系统的影响,但在灵活性和性能方面进行了优化。它首次发布于 2008 年,迅速成为 Python 社区中最受欢迎的模板...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK