Django在尝试通过django-admin-tools创建菜单时引发了ImproperlyConfigured异常。

9
我已经成功地配置了django-admin-tools,并开始使用。我尝试按照文档中的说明创建自定义菜单,如下所示:
python3 manage.py custommenu

然而,这里出现了一个ImproperlyConfigured错误,如下所示:

django.core.exceptions.ImproperlyConfigured: app_dirs must not be set when loaders is defined.

我查看了目录,menu.py已经成功创建,但与文档相反,内容为空。

TEMPLATES变量的配置如下:

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',
                'admin_tools.template_loaders.Loader',
            ],
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
                'admin_tools.template_loaders.Loader',
            ],
        },
    },
]

这是否意味着在创建任何应用程序之前,我需要安装 django-admin-tools

环境

  • python3
  • django 1.8.7
3个回答

26

删除'APP_DIRS': True,这一行。


我的应用程序中有模板,这会影响它吗? - Eray Erdin
看起来安装django-admin-tools导致我的其他应用程序崩溃了,我会尝试一下这个。 - Eray Erdin
@Eray,不,删除那一行不应该影响你的模板,只要你的loaders部分填充了模板加载器(而且你似乎已经填充了)。 - Alex Morozov
奇怪的是,我的另一个应用程序在返回页面时引发了“TypeError: 'Loader' object is not iterable”错误。看来我需要删除django-admin-tools。但是我会接受这个作为有效答案,因为它解决了我的特定问题。谢谢。^^ - Eray Erdin

3
如果你想知道为什么需要删除'APP_DIRS': True才能使其工作,我建议你阅读文档-https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.loaders.app_directories.Loader
注意:请使用相应版本的Django文档。
一般来说:APP_DIRS和选项loaders不能同时使用,因此您有两个选择:
1.从OPTIONS中删除loaders 2.删除APP_DIRS 关于问题:
由于Erdin想要使用'admin_tools.template_loaders.Loader',他必须删除APP_DIRS。然而,您可能会因其他原因遇到这个问题,因此考虑选项1可能是值得的。

如果设置了loaders,即使DEBUG = True,也会使用缓存的模板。 - caot

1
Erdin Eray,我知道已经有一段时间了,但我遇到了你在接受答案评论中描述的问题TypeError: 'Loader' object is not iterable。这是因为我在context_processors中包含了admin_tools.template_loaders.Loader,导致出现错误。它应该只包含在loaders中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接