2009-06-21 65 views
1

因此,我剛開始學習Django,並試圖完成本書中的示例應用程序之一。我現在陷入了創建DRY URL的困境。更具體地說,我無法讓我的上下文處理器工作。創建我的背景處理器像這樣:Django上下文處理器故障

from django.conf import settings 
#from mysite.settings import ROOT_URL 

def root_url_processor(request): 
    return {'ROOT_URL': settings.ROOT_URL} 

和我放在這個文件在我的應用程序,具體的mysite /照相館/ context_processors.py。我在我的項目的根settings.py文件包含:

TEMPLATE_CONTEXT_PROCESSORS = ('mysite.context_processors',) 

當我嘗試去那個我也在我的settings.py指定的ROOT_URL,我收到此錯誤:

類型錯誤在/畫廊/

「模塊」對象不是可調用

/畫廊/是該特定應用的ROOT_URL。我意識到perhpas這可能意味着命名衝突,但我找不到一個。此外,當我從settings.py註釋掉TEMPLATE_CONTEXT_PROCESSORS定義時,應用程序實際上會加載,但是我的縮略圖不會出現(可能是因爲我的模板不知道ROOT_URL,對嗎?)。任何人有什麼想法可能是什麼問題?

編輯:這是我的settings.py在某些情況下,它的信息是使用:

ROOT_URLCONF = 'mysite.urls' 

ROOT_URL = '/gallery/' 
LOGIN_URL = ROOT_URL + 'login/' 
MEDIA_URL = ROOT_URL + 'media/' 
ADMIN_MEDIA_PREFIX = MEDIA_URL + 'admin/' 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

TEMPLATE_CONTEXT_PROCESSORS = ('mysite.photogallery.context_processors',) 

EDIT2:我要添加關於我的網址文件的一些信息。基本上,我有一個根urls.py,一個real_urls.py,它也位於根目錄,以及一個存在於應用程序中的urls.py。基本上,root/urls.py隱藏了real_urls.py中的ROOT_URL,然後包含我的應用程序的urls.py。

根/ urls.py:

from django.conf.urls.defaults import * 
#from mysite.settings import ROOT_URL 
from django.conf import settings 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    # Example: 
    (r'^blog/', include('mysite.blog.urls')), 
         url(r'^%s' % settings.ROOT_URL[1:], include('mysite.real_urls')), 
    ) 

根/ real_urls.py:

from django.conf.urls.defaults import * 
from django.contrib import admin 

urlpatterns = patterns('', url(r'^admin/(.*)', admin.site.root), 
         url(r'^', include('mysite.photogallery.urls')), 
         ) 

根/圖片欣賞/ urls.py(注意,這可能是一個不造成任何的問題,但我的情況下,任何人希望看到它在這裏將它添加):

from django.conf.urls.defaults import * 
from mysite.photogallery.models import Item, Photo 

urlpatterns = patterns('django.views.generic', url(r'^$', 'simple.direct_to_template', kwargs={'template': 'index.html', 'extra_context': {'item_list': lambda: Item.objects.all()} 
                           }, 
                name='index'), url(r'^items/$', 'list_detail.object_list', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_list.html', 'allow_empty': True }, 
                     name='item_list'), url(r'^items/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_detail.html' }, name='item_detail'), url(r'^photos/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Photo.objects.all(), 'template_name': 'photos_detail.html' }, name='photo_detail'),) 
+0

如果你真的這樣調用它,你還應該將'return'語句中的常規變量改爲curly來防止解析錯誤。 – che 2009-06-21 23:45:53

+0

Woops,將它翻譯爲SO時出錯。我已經修復了代碼以匹配我實際擁有的代碼。 – AlbertoPL 2009-06-21 23:50:24

回答