使用 Jinja2 替换 django 的模板引擎

使用 django 的一个大问题就是,模板功能用的太不顺心了,我试图要在里面计算一下 a * b,答案居然是不行。

然后在看一个教程的时候推荐了几个极好的轮子,其中就有替换掉原生 template 的 Jinja2,使用这个之后可以更灵活地在模板语言里面调用 python 对象的属性、方法以及各种函数,并且,语法风格上面与原生的 template 语法基本一致(有少数差异)。

从语言哲学上面考虑,其实 django 的模板希望尽可能地与逻辑解耦,于是干脆“不允许”这样做。如果团队分工明确,前后端各自精彩,会得益于这种独立性,但是对于我这种全栈,前后端一手包办的情况下,很多情况下这种“不允许”是令人极度抓狂的。无论从代码的简洁以及性能上面,都很欺负人的强迫症。(当时为了处理列表的迭代问题,就非得让我用 jQuery 来做后期处理)。

Jinja 的哲学也建议模板与视图的解耦,但是它仅仅是“不建议”我们在模板上面写逻辑,但“允许”这样做。其实这就是我想要的,在我这种场景,自己把控好节奏和质量,是可以大大提高生产效率的。

然后下面就研究一下到底怎么实施这个计划:把 Jinja2 替换到 django 的模板里面


OK,闲话少说,我们开始。

1. 安装 Jinja2

pip install jinja2
# 测试安装是否成功,没报错即为 OK
>>> import jinja2

2. 使用 coffin 集成

(不懂为啥改个这样的名字——coffin 意为棺材,可能作者很受不了原生的 django 模板吧?)

pip install coffin

后记:2014-12-14

最终实际使用的时候并没有采取 Jinja2,主要原因有几个:

  1. 原生的很多函数受到了影响,整合很麻烦,包括 {% url %}, {% static %} 等等,这些是很致命的因素;
  2. 如上,因此完全脱离原生模板的想法其实是不现实的;
  3. 然后,我们如果需要在原生模板的基础上实现一些额外的功能,其实 Django 本身提供了自定义模板标签和过滤器的方法,这些用起来就可以解决绝大部分的问题;

【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/05/django-jinja2.html【使用 Jinja2 替换 django 的模板引擎】

发表评论

电子邮件地址不会被公开。 必填项已用*标注