Django 1.8与Jinja2:Contrib app管理员无法正常工作

时间:2015-04-02 18:37:26

标签: django django-templates jinja2

我升级到全新安装的Django 1.8,并开始使用Jinja2,因为它说它现在得到了支持,Jinja2有一些我可以在我的项目中使用的功能。

在完成将我的应用程序的模板调整到Jinja2并利用现有的新功能后,我发现contrib app Admin不再有效。

“/ admin / login /”中的“TemplateDoesNotExist”

所以事实证明,contrib app Admin只为DjangoTemplates而不是Jinja2制作了模板。我首先完成了天真的事情并在[...]/site-packages/django/contrib/admin中从templatesjinja2制作了一个符号链接,但模板使用的是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',
-            ],
-        },
     },
 ]

有没有人知道:

  1. 如何让contrib app管理员继续使用DjangoTemplates,同时让我自己的应用程序使用Jinja2,或
  2. 如果有另一个管理员应用程序与支持Jinja2或
  3. 的默认应用程序一样好
  4. 如果还有其他我忽略或应该注意的事情?
  5. 感谢您的时间:)

2 个答案:

答案 0 :(得分:7)

管理员应用程序没有附带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',
        ],
    },
]

答案 1 :(得分:0)

理想的解决方案是使默认模板系统优先于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')],
    },
]

请记住,目录结构一定不允许默认模板系统访问您的主页。