解决Django换用jinja2模板引擎后admin提示“TemplateDoesNotExist”
2017-10-22 21:30
567 查看
jinja2模板引擎号称比Django自带的快10倍,另外还有别的强大的功能,那为什么不用呢?
配置支持jinja2
新增两个文件,把它们放在项目内:
backends.pyimport 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
setting.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': 'pathto.backends.Jinja2Backend', 'DIRS': ['templates'], 'APP_DIRS': True, 'OPTIONS': { 'environment': 'pathto.env.environment', 'context_processors': CONTEXT_PROCESSORS, #'extensions': [your extensions here], #不知道干嘛的 }, }, ]
相关文章推荐
- 有时候,一点小问题,就会纠结你半天,真是基础不牢啊。 彻底解决 django的模板templates路径的问题; 一般会提示什么模板找不到,类似:TemplateDoesNotExist at /ac
- django 提示Site matching query does not exist. 以及创建admin账号
- django 提示Site matching query does not exist. 以及创建admin账号
- Django下TemplateDoesNotExist 异常的解决方法:
- Django中提示TemplateDoesNotExist?
- django:TemplateDoesNotExist错误的解决方法
- Django出错提示TemplateDoesNotExist at /
- django找不到模板(TemplateDoesNotExist at)的异常处理案例
- mui 在页面传值提示webview[] does not exist 这个错误?解决办法
- Django 找不到模版报错" django.template.exceptions.TemplateDoesNotExist: index.html"
- Qt for Android编译报错提示:Install to device:No Buildfile:build.xml does not exist!解决方法
- django 1.11 报表:django.template.exceptions.TemplateDoesNotExist:
- python3 Django TemplateDoesNotExist at /
- U盘安装CentOS 7/RedHat7提示 “Warning: /dev/root does not exist, could not boot” 解决办法
- django TemplateDoesNotExist at /
- U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法
- U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法
- TemplateDoesNotExist 错误解决办法
- Django1.10 TemplateDoesNotExist at /index/
- Django报错:django.template.exceptions.TemplateDoesNotExist: index.html