首页 > 编程 > Python > 正文

更换Django默认的模板引擎为jinja2的实现方法

2020-02-15 21:32:37
字体:
来源:转载
供稿:网友

本机环境

操作系统:fedora24

python版本:3.5

Django版本:1.11.1

jinja2版本:2.9.6

为何要更换

DTL

先来谈谈Django的模板引擎,找了下,并没有一个确定的名字,就简单的叫Django Templates Language(DTL),中文就叫Django模板语言。使用中,大家会发现很多局限性,最明显的就是四则运算。就只能加减,乘除都不支持。另外还有判断相等,不能直接if,要用ifequal。确实不太方便。还有一点,DTL很慢,jinja2宣称比DTL快10-20倍。

jinja2

先来安装,pip3 install jinja2。

配置:从Django1.8开始,支持第三方模板引擎,可以很容易的配置到。首先,在你的项目下建立一个jinja2_env.py,内容如下:

#from __future__ import absolute_import # 如果是py2就取消这行的注释from django.contrib.staticfiles.storage import staticfiles_storagefrom django.urls import reversefrom jinja2 import Environmentdef environment(**options): env = Environment(**options) env.globals.update({ 'static': staticfiles_storage.url, 'url': reverse, }) return env

然后在setting.py设置

TEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', ***1 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': False, ***2 'OPTIONS': {  'context_processors': [  'django.template.context_processors.debug',  'django.template.context_processors.request',  'django.contrib.auth.context_processors.auth',  'django.contrib.messages.context_processors.messages',  ],  'environment': 'APP_NAME.jinja2_env.environment', ***3 }, },]

标***的是需要修改的地方。

- ***1:这里指定引擎为jinja2

- ***2:这里确保不去app下的子目录的jinja2目录找模板

- ***3:配置环境,上边创建的py文件

这样一来,你的默认模板引擎就添加好了。

更换到jinja2要做的一些改变

切换你的ide模板语言

例如我使用pycharm,在File-Settings-Language & Frameworks-Python Template Languages中修改。

这一步不是必要,但是错误的支持模板语言会让你认为正确的标签是错误的。

csrf_token

Django:{% csrf_token %}jinja2{{ csrf_input }}

<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">

四则运算

Django:只支持加减{{ var | add:-1 }}jinja2:四则运算{{ var + 1 }}

if条件判断是否相等

Django:{% ifequal vara varb %}do sometings{% endifequal %} #相等{% ifnotequal vara varb %}do sometings{% endifnotequal %} #不等jinja2:{% if vara == varb %}do sometings{% endif %} #相等{% if vara != varb %}do sometings{% endif %} #不等

说起来jinja2更符合python的语法

循环索引

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表