Django 1.8与Jinja2:Contrib应用程序管理员不工作



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

在完成了将我的应用程序模板调整为Jinja2并利用现在可用的新功能后,我发现contrib应用程序Admin不再工作。

"TemplateDoesNotExist/admin/login/"

所以事实证明,contrib应用程序Admin只有为DjanoTemplates制作的模板,而没有为Jinja2制作的模板。我先做了一件天真的事情,在[...]/site-packages/django/contrib/admin中创建了一个从templatesjinja2的符号链接,但模板使用的是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',
-            ],
-        },
     },
 ]

有人知道吗:

  1. 如何让contrib应用程序管理员继续使用DjanoTemplates,同时让我自己的应用程序使用Jinja2,或者
  2. 如果有另一个管理应用程序和默认的一样好,支持Jinja2,或者
  3. 如果还有什么我忽略了或应该意识到的

感谢您抽出时间:)

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

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

最新更新