Django上下文处理器问题
我刚开始学习Django,正在尝试完成书中的一个示例应用程序。现在我在创建DRY(Don't Repeat Yourself)网址时遇到了困难。更具体地说,我的上下文处理器无法正常工作。我是这样创建我的上下文处理器的:
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',)
当我尝试访问我在settings.py中指定的ROOT_URL时,出现了这个错误:
在/gallery/处发生了TypeError
'module'对象不可调用
/gallery/是这个特定应用程序的ROOT_URL。我意识到这可能是命名冲突,但我找不到冲突的地方。此外,当我把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',)
编辑2:我将添加一些关于我的网址文件的信息。基本上,我有一个根目录的urls.py,一个位于根目录的real_urls.py,以及一个存在于应用程序中的urls.py。简单来说,root/urls.py隐藏了real_urls.py中的ROOT_URL,然后包含了我应用程序的urls.py。
root/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')),
)
root/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'),)