2009-06-21 3 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',) 

Когда я пытаюсь перейти к ROOT_URL, что я также указанный в моем settings.py, я получаю эту ошибку:

TypeError в/галерея/

«модуль» объект не вызываемая

/галерея/является ROOT_URL данного конкретного применения. Я понимаю, что perhpas это может означать конфликт имен, но я не могу его найти. Кроме того, когда я комментирую определение TEMPLATE_CONTEXT_PROCESSORS из settings.py, приложение действительно загружается, однако мои миниатюрные изображения не отображаются (возможно, потому, что мои шаблоны не знают о ROOT_URL, правильно?). У кого-нибудь есть идеи относительно того, что может быть проблемой?

EDIT: Вот некоторая информация о моем 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: Я собираюсь добавить некоторую информацию о моих URL Файлы. По сути, у меня есть root urls.py, real_urls.py, который также находится в корне, и urls.py, который существует в приложении. В основном, root/urls.py скрывает ROOT_URL от real_urls.py, который затем включает 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» на фигурные, чтобы предотвратить ошибки синтаксического анализа. – che

+0

Woops, это была ошибка при переводе на SO. Я исправил код в соответствии с тем, что у меня на самом деле. – AlbertoPL

ответ

4

TEMPLATE_CONTEXT_PROCESSORS должен содержать список ок llable объектов, а не модулей. Перечислите фактические функции, которые преобразуют контексты шаблона. Link to docs.

+0

Большое спасибо! Книга была довольно запутанной по этому поводу; Я добавил root_url_processor в конец моих TEMPLATE_CONTEXT_PROCESSORS, и он сработал. – AlbertoPL

+2

Не слишком полагайтесь на книги. Отлично подходит для обучения, но если вы застряли, проверьте онлайн-документацию. Если вы все еще застряли, вы можете найти ответ в исходном коде. очевидно, SO по-прежнему является отличным вариантом. – SingleNegationElimination

+1

@TokenMacGuy: Читайте источник - отличный совет. –

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