1

Я начинаю Django и сталкиваюсь с проблемой с django context_processors. Я хочу использовать набор запросов во всем моем шаблоне для создания меню. Но я получаю эту ошибку, когда я пытаюсь попасть на эту страницу http://mysite/catalog которая вызывает мою cardabelle/каталог/views.py:Django ImportError Нет модуля с именем 'catalog.context_processors'

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

Здесь «cardaballe» является мое имя проекта и «каталог» мое имя приложения.

Вот некоторые интересные части (я думаю) от моего 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/каталог/views.py:

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

Кто-нибудь знает, почему django не находит мой новый пользовательский контекст?

Заранее благодарим за вашу помощь!

ответ

1

Я предполагаю, что у вас есть файл context_processors.py в каталоге каталог , который находится на том же уровне, что и каталог cardabelle?

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

Если да, то установка context_processor следует читать

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

Также context_processor должен возвращать dict. Текущий код читается Category.objects.value(). Это, вероятно, опечатка при вставке в SO? На всякий случай, убедитесь, что он читает Category.objects.values(), который возвращает список dicts.

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

Она будет доступна в качестве {{ menu_categories }} в шаблонах.

+0

Большое спасибо! Это работает ! :) –

Смежные вопросы