本机环境
操作系统: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_storage from django.urls import reverse from jinja2 import Environment def 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的语法
循环索引
Django: {% for i in s %} {{ forloop.counter }} #从1开始的索引 {% endfor %} jinja2 {% for i in s %} {{ loop.index }} #从1开始的索引 {{ loop.index0 }} #从1开始的索引 {% endfor %}
对方法的支持
Django中,方法是被当作对象的属性
jinja2中,就是当作方法,所以还可以传递参数。
比如说一个表单对象,有一个as_p()方法。
Django: {{ form.as_p }} jinja2: {{ form.as_p() }}
打印不存在的变量
在Django中,如果没有传入某个字典参数,使用{{ var }}会打印一个空(什么都不打印)
但jinja2,如果值不存在,就会打印出来”{{ var }}”,要想实现如DTL的功能,请使用{{ var|default(“”) }}
一些坑
不要传入名为user的参数
实测,在模板中,本身就有变量user,是指向django.contrib.auth.models.User,如果你再传递一个字典键为user,实际相当于没传入,毫无作用,所以,改名吧。
以上这篇更换Django默认的模板引擎为jinja2的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 华少翌.2005-华少翌【中唱艺能】【WAV+CUE】
- 群星《十二女声Ⅱ》[WAV/CUE/分轨][527MB]
- 大自然音乐系列《漫步在山裡》[WAV/CUE/分轨][502.8MB]
- 大自然音乐系列《星光夜语》[WAV/CUE/分轨][453.3MB]
- 史依弘《史依弘交响乐京剧演唱专辑HQ》头版限量编号[WAV+CUE]
- 曼丽2020《女人三十风继续吹》HQCD[WAV+CUE]
- 曼丽2021《女人三十2雾之恋》HQCD[WAV+CUE]
- 隔壁老樊.2019-我曾【好听音乐】【FLAC分轨】
- 高林生.1993-牵挂你的人是我【白天鹅】【WAV+CUE】
- 洪卓立.2012-找个懂我的女孩(国专)【英皇娱乐】【WAV+CUE】
- 曼丽2022《女人三十3晚秋》HQCD[WAV+CUE]
- 曼丽2018《女人三十4冬天》HQCD[WAV+CUE]
- 柏菲-《好歌30年壹》限量开盘母带ORMCD[低速原抓WAV+CUE]
- 大自然音乐系列《水舞》[WAV/CUE/分轨][424.3MB]
- 大自然音乐系列《星光夜语》[WAV/CUE/分轨][453.3MB]