Проблема с контекстным процессором Django

Итак, я только начинаю изучать Django и пытаюсь завершить одно из примеров приложений из книги. Я застрял сейчас при создании СУХИХ URL-адресов. В частности, я не могу заставить работать свой процессор контекста. Я создаю свой контекстный процессор следующим образом:

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

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

и я поместил этот файл в свое приложение, в частности, mysite/photogallery/context_processors.py. Мой файл settings.py в корне моего проекта содержит:

TEMPLATE_CONTEXT_PROCESSORS = ('mysite.context_processors',)

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

Ошибка типа в /галерее/

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

/gallery/ — это ROOT_URL этого конкретного приложения. Я понимаю, что, возможно, это может означать конфликт имен, но я не могу его найти. Кроме того, когда я комментирую определение 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. По сути, у меня есть корневой 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')),
                       )

root/photogallery/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'),)

person AlbertoPL    schedule 21.06.2009    source источник
comment
Если вы действительно называете это так, вы также должны изменить свои обычные скобки в операторе return на фигурные, чтобы предотвратить ошибки синтаксического анализа.   -  person che    schedule 22.06.2009
comment
Упс, это была ошибка при переводе на SO. Я исправил код, чтобы он соответствовал тому, что у меня есть на самом деле.   -  person AlbertoPL    schedule 22.06.2009


Ответы (1)


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

person SingleNegationElimination    schedule 22.06.2009
comment
Большое тебе спасибо! Книга была довольно запутанной по этому поводу; Я добавил root_url_processor в конец своего TEMPLATE_CONTEXT_PROCESSORS, и это сработало. - person AlbertoPL; 22.06.2009
comment
Не слишком полагайтесь на книги. Отлично подходит для обучения, но если вы застряли, проверьте онлайн-документацию. Если вы все еще застряли, вы даже можете найти ответ в исходном коде. очевидно, что SO по-прежнему является отличным вариантом. - person SingleNegationElimination; 22.06.2009