带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员不起作用
Posted
技术标签:
【中文标题】带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员不起作用【英文标题】:Django 1.8 with Jinja2: Contrib app Admin not working 【发布时间】:2015-06-07 19:54:47 【问题描述】:我升级到全新安装的 Django 1.8 并开始使用 Jinja2,因为它说它现在受支持,而且 Jinja2 有一些我可以在我的项目中使用的功能。
在将我的应用的模板适应 Jinja2 并利用现在可用的新功能后,我发现 contrib 应用 Admin 不再工作。
"TemplateDoesNotExist at /admin/login/"
事实证明,contrib app Admin 只有为 DjangoTemplates 而不是为 Jinja2 制作的模板。我首先做了一件天真的事情,并在[...]/site-packages/django/contrib/admin
中创建了一个从templates
到jinja2
的符号链接,但是模板使用的是DjangoTemplates 细节,所以Jinja2 不会接受它们。我删除了符号链接。
我切换到 Jinja2 的方式是在我的项目 settings.py
中进行以下更改:
TEMPLATES = [
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
- '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',
- ],
- ,
,
]
有人知道吗:
-
如何让 contrib 应用 Admin 继续使用 DjangoTemplates,同时让我自己的应用使用 Jinja2,或者
如果有另一个支持 Jinja2 的管理应用程序与默认应用程序一样好,或
是否还有其他我忽略或应该注意的事项?
感谢您的宝贵时间:)
【问题讨论】:
【参考方案1】:理想的解决方案是让默认模板系统优先于 Jinja 系统。唯一的区别是指定的DIRS
需要不同。如果您只关心管理员,则该过程相当简单。
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], # This is particularly important as it will not look into the default template directory
,
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
,
]
请记住,目录结构不得允许默认模板系统访问您的主页。
【讨论】:
【参考方案2】:管理应用不附带 Jinja2 模板。您需要将项目配置为使用 Django 和 Jinja2 模板。
Django template docs 有以下示例。
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'/home/html/example.com',
'/home/html/default',
],
,
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [
'/home/html/jinja2',
],
,
]
【讨论】:
我主要听从了您的建议,效果很好。我所做的不同之处在于我将 Jinja2 放在 DjangoTemplates 之前而不是之后,因为在正常操作中,它是最经常是正确的模板引擎,也不是像你的示例中那样提供 DIRS,我将它们保留为默认值(空列表) 并包含其他一些默认值。以上是关于带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员不起作用的主要内容,如果未能解决你的问题,请参考以下文章
带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?
从 Django 1.6 (with south) 升级到 1.8 不会修改用户表上的“last_login”
如何正确应用 django/jinja2 模板过滤器“转义”和“换行符”?