Django ImportError 没有名为 'catalog.context_processors' 的模块

Django ImportError No module named 'catalog.context_processors'

我是 Django 初学者,我遇到了一个 Django 问题 context_processors。 我想在我的所有模板中使用查询集来生成菜单。 但是当我尝试访问此页面 http://mysite/catalog 时出现此错误,该页面调用我的 cardabelle/catalog/views.py :

ImportError at /catalog/
No module named 'cardabelle.catalog'

这里 "cardaballe" 是我的项目名称和 "catalog" 我的应用程序名称。

这是我的 cardabelle/cardabelle/settings.py 中一些有趣的部分(我猜):

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'debug_toolbar',
    'catalog',
    'autoslug',
)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'template')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'cardabelle.catalog.context_processors.categories',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'cardabelle.wsgi.application'

这是我在 cardabelle/catalog/views.py 中的自定义上下文:

def categories(request):
    return Category.objects.value()

有人知道为什么 django 找不到我的新自定义上下文吗?

在此先感谢您的帮助!

我猜你在目录 catalog 中有文件 context_processors.py,它与目录 cardabelle[=29= 处于同一级别]?

/catalog
    __init__.py
    context_processors.py
    ...
/cardabelle
    __init__.py
    settings.py
    ...

如果是,context_processor 设置应为

TEMPLATES = [
    {
        # ...
        'OPTIONS': {
            'context_processors': [
                # ...
                'catalog.context_processors.categories',
                # ...
            ],
        },
    },
]

另外 context_processor 应该 return 一个 dict。您当前的代码显示为 Category.objects.value()。将它粘贴到 SO 时,这可能是一个错字?为了以防万一,请确保它显示为 Category.objects.values(),其中 return 是一个字典列表。

def categories(request):
    return {'menu_categories': Category.objects.values()}

然后它将作为 {{ menu_categories }} 在您的模板中可用。