带有 Jinja2 的 Django 1.8:Contrib 应用程序管理员无法正常工作
Django 1.8 with Jinja2: Contrib app Admin not working
我升级到 Django 1.8 的全新安装并开始使用 Jinja2,因为它说现在支持它并且 Jinja2 有一些我可以在我的项目中使用的功能。
将我的应用程序的模板调整到 Jinja2 并利用现在可用的新功能后,我发现 contrib 应用程序管理不再有效。
"TemplateDoesNotExist at /admin/login/"
事实证明,contrib 应用程序管理员只有为 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 应用管理员继续使用 DjangoTemplates,同时让我自己的应用使用 Jinja2,或者
- 如果有另一个管理应用程序与支持 Jinja2 的默认应用程序一样好,或者
- 是否还有其他我忽略或应该注意的事情?
感谢您的宝贵时间:)
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',
],
},
]
理想的解决方案是使默认模板系统优先于 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')],
},
]
请记住,目录结构不得允许默认模板系统访问您的主页。
我升级到 Django 1.8 的全新安装并开始使用 Jinja2,因为它说现在支持它并且 Jinja2 有一些我可以在我的项目中使用的功能。
将我的应用程序的模板调整到 Jinja2 并利用现在可用的新功能后,我发现 contrib 应用程序管理不再有效。
"TemplateDoesNotExist at /admin/login/"
事实证明,contrib 应用程序管理员只有为 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 应用管理员继续使用 DjangoTemplates,同时让我自己的应用使用 Jinja2,或者
- 如果有另一个管理应用程序与支持 Jinja2 的默认应用程序一样好,或者
- 是否还有其他我忽略或应该注意的事情?
感谢您的宝贵时间:)
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',
],
},
]
理想的解决方案是使默认模板系统优先于 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')],
},
]
请记住,目录结构不得允许默认模板系统访问您的主页。