我在Django项目中有一些带有自己模板的应用程序(例如/project/app1/template
,/project/app2/template
等等。)
但是,模板上下文处理器(在主应用程序/项目的settings.py
中定义)在这些应用程序模板中不可用。
我必须手动设置context_instance
才能在子模板中启用上下文处理器(否则模板中缺少上下文处理器):
from django.template import RequestContext
def index(request):
return render_to_response('index.html', {}, context_instance=RequestContext(request))
这是我的settings.py
:
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = PACKAGE_ROOT
TEMPLATES = [
{
"DIRS": [
os.path.join(PACKAGE_ROOT, "templates"),
],
"APP_DIRS": True,
"OPTIONS": {
...
"context_processors": [
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.request",
...
],
},
},
]
如何在不在每个视图功能中手动注入context_instance
的情况下访问应用模板中的上下文处理器?
答案 0 :(得分:1)
这与“app templates”没有任何关系;无论模板位于何处,行为都完全相同。
如果要运行上下文处理器,则总是需要RequestContext;除了其他任何东西,那是因为它们被传递了请求对象,所以它需要存在。
但是有一个创建该requestcontext的快捷方式,那就是render
函数:
def index(request):
return render(request, 'index.html', {})
请注意,这会将请求作为第一个参数。