1

我是一個Django初學者,我遇到了django context_processors的一個問題。 我想在我的所有模板中使用查詢集來生成菜單。Django ImportError沒有名爲'catalog.context_processors'的模塊

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

這裏的「cardaballe」是我的項目名稱和「目錄」我的應用程序名稱: 但是,當我嘗試訪問此頁http://mysite/catalog這就要求我cardabelle /目錄/ views.py我得到這個錯誤。

下面是一些有趣的部分(我猜)從我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(),它返回一個字典列表。

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

然後它將可作爲在模板{{ menu_categories }}

+0

非常感謝!其作品 ! :) –

相關問題