Django,模板上下文处理器

我有一个奇怪的问题,我想添加一个全局查询使用上下文处理器。 这是我如何做到这一点:

在我的应用程序中,这样做了一个processor.py:

from myproject.myapp.models import Foo def foos(request): return {'foos': Foo.objects.all()} 

并在我的setting.py结尾添加了这个:

 TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',) 

最后,我将这个观点传递给我:

 def index_view(request): return render_to_response('index.html', {}, context_instance=RequestContext(request)) 

并在我的index.html模板:

 <select id="select_foo"> {% for foo in foos %} <option value="/{{ foo.slug }}">{{ foo.name }}</option> {% endfor %} </select> 

最后是我的url:

 (r'^$', 'myapp.views.index_view'), 

我的foos显示没有任何问题,但是我的media_url和其他上下文都没有了。 可能是什么问题

当你指定这个:

 TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',) 

在你的设置文件中,你重写了Django的默认上下文处理器 。 为了扩展列表,你需要在你的设置中包含默认的:

 TEMPLATE_CONTEXT_PROCESSORS = ( "django.core.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "myapp.processor.foos", ) 

请注意,上面的设置是django 1.1的默认设置(加上你的处理器)。

您需要添加TEMPLATE_CONTEXT_PROCESSORS的默认值。 但是,不要将这些值绑定到特定版本的Django上,而是将上下文处理器添加到缺省值中,方法如下:

 from django.conf import global_settings TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( "myapp.processor.foos", ) 

确保在元组中包含尾随逗号,以便Python将其识别为元组。

这里Django 1.3对我有用

 TEMPLATE_CONTEXT_PROCESSORS = ( "django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.contrib.messages.context_processors.messages", "myapp.processor.foos", )