【问题标题】:Django Raises ImproperlyConfigured When Trying to Create A Menu by django-admin-toolsDjango 在尝试通过 django-admin-tools 创建菜单时引发错误配置
【发布时间】:2016-01-10 18:31:45
【问题描述】:

我成功配置了 django-admin-tools 以供使用。我尝试创建一个自定义菜单as told in documentation,如下所示:

python3 manage.py custommenu

但是,这在下面引发了ImproperlyConfugured 错误,说:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    删除'APP_DIRS': True, 行。

    【讨论】:

    • 我的应用程序中有模板,这会影响吗?
    • 安装 django-admin-tools 好像让我的其他应用崩溃了,我试试看。
    • @Eray,不,删除该行不会影响您的模板,只要您的 loaders 部分充满了模板加载器(并且您似乎拥有它)。
    • 奇怪的是,我的另一个应用程序在返回时会在页面上引发TypeError: 'Loader' object is not iterable。看来我会删除 django-admin-tools。但我会接受这个作为有效答案,因为它解决了我的特定问题。谢谢。 ^^
    【解决方案2】:

    如果您想知道为什么需要删除 '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也使用缓存的模板
    【解决方案3】:

    Erdin Eray,我知道已经有一段时间了,但我遇到了TypeError: 'Loader' object is not iterable,这是您在已接受答案的 cmets 中描述的问题。发生这种情况是因为我在context_processors 中包含了admin_tools.template_loaders.Loader,如上所述,这会导致错误。它应该只包含在loaders 中。

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2016-12-11
      • 2016-05-29
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多