我有一个奇怪的问题,我想使用上下文处理器添加全局查询。这是我通过以下方法做到的:
这样在我的应用中创建了一个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>
最后是我的网址:
(r'^$', 'myapp.views.index_view'),
我的foos显示没有问题,但是我的media_url和其他上下文消失了。可能是什么问题
当你指定时:
在设置文件中,你将覆盖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将其识别为元组。