使用 Jinja2 时管理员中断
Admin Breaks When Using Jinja2
由于某种原因,当我尝试使用 Jinja2 而不是 Django 模板引擎作为我的模板引擎时,我的 wagtail 管理界面出现故障。我的前端工作得很好,它在 app/jinja2 中找到了我的模板。这是添加了 wagtail 的 Django 项目。
这是我在尝试访问 /admin 时遇到的错误,
TemplateDoesNotExist at /admin/wagtailadmin/home.html
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/
Django Version: 1.11
Exception Type: TemplateDoesNotExist
Exception Value: wagtailadmin/home.html
Exception Location: /Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/site-packages/django/template/loader.py in get_template, line 25
Python Executable: /Users/dbroadlick/Desktop/projects/codero2/virtualenv/bin/python
Python Version: 3.6.1
Python Path: ['/Users/dbroadlick/Desktop/projects/codero2',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python36.zip',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/lib-dynload',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/site-packages']
Server time: Mon, 24 Jul 2017 21:40:59 +0000
这是我的模板配置,
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'wagtail.wagtailcore.jinja2tags.core',
'wagtail.wagtailadmin.jinja2tags.userbar',
'wagtail.wagtailimages.jinja2tags.images',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
它还说它正在尝试使用它不应该使用的 jinja2 引擎,因为 wagtail admin 是使用 Django 模板编程的。
您的 TEMPLATES
设置将 Jinja2 配置为唯一可用的模板引擎,因此没有任何东西可以触发 Wagtail 管理员所依赖的 'traditional' Django 模板引擎行为(即:查看每个请求模板路径的应用程序 /template
文件夹 wagtailadmin/home.html
)。结果,永远找不到模板。您需要在 TEMPLATES
设置中包含 Jinja2 和 DjangoTemplates 的配置 - 例如:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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',
],
},
},
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'wagtail.wagtailcore.jinja2tags.core',
'wagtail.wagtailadmin.jinja2tags.userbar',
'wagtail.wagtailimages.jinja2tags.images',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
请注意,您需要制定一些约定来告诉 Django 应该使用哪个引擎呈现哪些模板 - 通过上述配置,我相信将您的 Jinja2 模板放在 some_app/jinja2/
而不是 some_app/templates/
应该处理这个问题。
由于某种原因,当我尝试使用 Jinja2 而不是 Django 模板引擎作为我的模板引擎时,我的 wagtail 管理界面出现故障。我的前端工作得很好,它在 app/jinja2 中找到了我的模板。这是添加了 wagtail 的 Django 项目。
这是我在尝试访问 /admin 时遇到的错误,
TemplateDoesNotExist at /admin/wagtailadmin/home.html
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/
Django Version: 1.11
Exception Type: TemplateDoesNotExist
Exception Value: wagtailadmin/home.html
Exception Location: /Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/site-packages/django/template/loader.py in get_template, line 25
Python Executable: /Users/dbroadlick/Desktop/projects/codero2/virtualenv/bin/python
Python Version: 3.6.1
Python Path: ['/Users/dbroadlick/Desktop/projects/codero2',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python36.zip',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/lib-dynload',
'/Users/dbroadlick/Desktop/projects/codero2/virtualenv/lib/python3.6/site-packages']
Server time: Mon, 24 Jul 2017 21:40:59 +0000
这是我的模板配置,
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'wagtail.wagtailcore.jinja2tags.core',
'wagtail.wagtailadmin.jinja2tags.userbar',
'wagtail.wagtailimages.jinja2tags.images',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
它还说它正在尝试使用它不应该使用的 jinja2 引擎,因为 wagtail admin 是使用 Django 模板编程的。
您的 TEMPLATES
设置将 Jinja2 配置为唯一可用的模板引擎,因此没有任何东西可以触发 Wagtail 管理员所依赖的 'traditional' Django 模板引擎行为(即:查看每个请求模板路径的应用程序 /template
文件夹 wagtailadmin/home.html
)。结果,永远找不到模板。您需要在 TEMPLATES
设置中包含 Jinja2 和 DjangoTemplates 的配置 - 例如:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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',
],
},
},
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'APP_DIRS': True,
'OPTIONS': {
'extensions': [
'wagtail.wagtailcore.jinja2tags.core',
'wagtail.wagtailadmin.jinja2tags.userbar',
'wagtail.wagtailimages.jinja2tags.images',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
请注意,您需要制定一些约定来告诉 Django 应该使用哪个引擎呈现哪些模板 - 通过上述配置,我相信将您的 Jinja2 模板放在 some_app/jinja2/
而不是 some_app/templates/
应该处理这个问题。