为什么这个Django模板上下文处理器不适用于所有请求?

为什么这个Django模板上下文处理器不适用于所有请求?,django,django-templates,Django,Django Templates,我遇到了以下Django模板上下文处理器问题 上下文处理器在myapp/context\u processors.py中定义: def my_context_processor(request): return { 'foo': 123, } 它与标准Django上下文处理器一起连接在settings.py中: TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.

我遇到了以下Django模板上下文处理器问题

上下文处理器在
myapp/context\u processors.py
中定义:

def my_context_processor(request):
    return {
        'foo': 123,
    }
它与标准Django上下文处理器一起连接在settings.py中:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'myproject.myapp.context_processors.my_context_processor',
)
我遇到的问题是,我的上下文处理器并没有应用于所有请求

它不适用于以下代码:

def index(request):
    return render_to_response("index.html", locals())
def index(request):
    return render_to_response("index.html", locals(), context_instance=RequestContext(request))
但是,它适用于以下代码:

def index(request):
    return render_to_response("index.html", locals())
def index(request):
    return render_to_response("index.html", locals(), context_instance=RequestContext(request))
我的印象是,上下文处理器适用于所有请求,而不仅仅是在提供
context\u实例时


如何使上下文处理器应用于所有请求?

上下文处理器变量仅在将
RequestContext
对象(用当前请求初始化)作为
context\u实例发送到模板时可用,因为您已经回答了自己的问题。它应用于使用
RequestContext
的响应。它不适用于那些不适用的


将其应用于所有响应的方法是确保始终使用RequestContext。或者,在Django 1.3+中,您可以使用新的
render
快捷方式,而不是
render\u to\u response
,该快捷方式为您创建请求上下文。

Django在Django 1.3中引入了一个新的
render
快捷方式,该快捷方式自动包括
RequestContext

from django.shortcuts import render

def my_view(request):
    # View code here...
    context = {
        'some_extra_var_for_template': 'value'
    }
    return render(request, 'myapp/index.html', context)

您可以在中阅读。

是否有任何简单的捷径可以用来避免上下文实例样板?我假设一个非常常见的场景是,您希望所有请求都存在上下文处理器变量。假设所有视图都包含一个页脚,该页脚需要“链接的站点”列表。“链接的_站点”将由上下文处理器提供,但我希望避免使用context_instance=RequestContext(request):-)分散我的代码