繁体   English   中英

Django上下文处理器麻烦

[英]Django Context Processor Trouble

所以我刚刚开始学习Django,我正在尝试完成本书中的一个示例应用程序。 我现在因为创建DRY 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',)

当我尝试转到我在settings.py中指定的ROOT_URL时,收到此错误:

/ gallery /的TypeError

'module'对象不可调用

/ gallery /是此特定应用程序的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 :我要添加一些关于我的url文件的信息。 基本上我有一个根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')),
                       )

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'),)

TEMPLATE_CONTEXT_PROCESSORS应包含可调用对象的列表,而不是模块。 列出将转换模板上下文的实际函数。 链接到文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM