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