我升级到Django 1.8的新安装,并开始使用Jinja2,因为它现在得到了支持,Jinja2有一些功能可以在我的项目中使用。
在完成了将我的应用程序模板调整为Jinja2并利用现在可用的新功能后,我发现contrib应用程序Admin不再工作。
"TemplateDoesNotExist/admin/login/"
所以事实证明,contrib应用程序Admin只有为DjanoTemplates制作的模板,而没有为Jinja2制作的模板。我先做了一件天真的事情,在[...]/site-packages/django/contrib/admin
中创建了一个从templates
到jinja2
的符号链接,但模板使用的是DjanoTemplates的细节,所以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应用程序管理员继续使用DjanoTemplates,同时让我自己的应用程序使用Jinja2,或者
- 如果有另一个管理应用程序和默认的一样好,支持Jinja2,或者
- 如果还有什么我忽略了或应该意识到的
感谢您抽出时间:)
管理应用程序没有附带Jinja2模板。您需要将您的项目配置为使用Django和Jinja2模板。
Django模板文档有以下示例。
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',
],
},
]
理想的解决方案是使默认模板系统优先于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')],
},
]
请记住,目录结构必须不允许默认模板系统访问您的主页。