带有 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 中创建了一个从 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 应用管理员继续使用 DjangoTemplates,同时让我自己的应用使用 Jinja2,或者
  2. 如果有另一个管理应用程序与支持 Jinja2 的默认应用程序一样好,或者
  3. 是否还有其他我忽略或应该注意的事情?

感谢您的宝贵时间:)

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')],
    },
]

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