前端 - django如何使用jinja2模板引擎 ?
高洛峰
高洛峰 2017-04-17 17:53:53
0
1
290

去百度,google搜索了很久,试了很多一直不行.
jinja2的模板解析速度快,而且又灵活,所以想切换一下.
django1.8以后,应该是支持这种模板切换了,按照官方的文档试了也不行~~

所以特地来此求助!能找的文档都找了都试过,都不行

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复 (1)
黄舟

不是不行,是有坑

加两个文件:

# backends.py import sys from django.template.backends import jinja2 as jinja2backend from django.template.backends.utils import csrf_input_lazy, csrf_token_lazy from django.template import TemplateDoesNotExist, TemplateSyntaxError from django.utils.module_loading import import_string import jinja2 import six # Original link: # https://code.djangoproject.com/attachment/ticket/24694/24694.py __author__ = 'carljm' class Jinja2Backend(jinja2backend.Jinja2): def __init__(self, params): self.context_processors = [ import_string(p) for p in params['OPTIONS'].pop('context_processors', []) ] super(Jinja2Backend, self).__init__(params) def from_string(self, template_code): return Template( self.env.from_string(template_code), self.context_processors) def get_template(self, template_name): try: return Template( self.env.get_template(template_name), self.context_processors) except jinja2.TemplateNotFound as exc: six.reraise(TemplateDoesNotExist, TemplateDoesNotExist(exc.args), sys.exc_info()[2]) except jinja2.TemplateSyntaxError as exc: six.reraise(TemplateSyntaxError, TemplateSyntaxError(exc.args), sys.exc_info()[2]) class Template(jinja2backend.Template): def __init__(self, template, context_processors): self.template = template self.context_processors = context_processors def render(self, context=None, request=None): if context is None: context = {} if request is not None: context['request'] = request lazy_csrf_input = csrf_input_lazy(request) context['csrf'] = lambda: lazy_csrf_input context['csrf_input'] = lazy_csrf_input context['csrf_token'] = csrf_token_lazy(request) for cp in self.context_processors: context.update(cp(request)) print(context) return self.template.render(context)
# env.py from __future__ import absolute_import from django.contrib.staticfiles.storage import staticfiles_storage from django.core.urlresolvers import reverse from jinja2 import Environment def environment(**options): env = Environment(**options) env.globals.update({ 'static': staticfiles_storage.url, 'url': reverse, }) return env

把它们放在你能找到的地方,然后设置:

# settings.py CONTEXT_PROCESSORS = [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': CONTEXT_PROCESSORS, }, }, { 'BACKEND': 'path.to.backends.Jinja2Backend', 'DIRS': ['templates'], 'APP_DIRS': True, 'OPTIONS': { 'environment': 'path.to.env.environment', 'context_processors': CONTEXT_PROCESSORS, 'extensions': [your extensions here], }, }, ]
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!