假设我有一个上下文处理器:
def title(request):
return {'titles': 'mytitle'}
我可以在模板中访问此变量{{ titles }}
。
但我怎么能在视图中这样做?
def myview(request):
print request.titles
似乎不起作用 - 'WSGIRequest' object has no attribute 'titles'
或许有更好的方法(比上下文处理器)可以在视图和模板中访问全局变量?
提前致谢。
答案 0 :(得分:10)
将上下文处理器方法路径(folder.context_processor.application_context)添加到TEMPLATE_CONTEXT_PROCESSORS。
在我的情况下,application_context是我在文件context_processor.py中定义的方法 和方法“application_context”返回{'titles':'mytitle'}
如果您想在视图中使用“title”作为全局变量,请以这种方式使用它
global_var = RequestContext(request).get("app_config")
titles = global_var.get("titles")
print titles
唯一的好处是“模板和视图中都可以看到相同的变量'标题'”
答案 1 :(得分:2)
上下文处理器绝不是全局变量。它们只是在启动RequestContext时运行的函数,它将项添加到该上下文。所以它们只有在你有RequestContext的地方才能使用,即在模板中。
您的示例并未真正了解您要访问的变量。如果它只是你想在任何地方使用的一些常量,一个好方法是将它们定义在中心位置,例如在settings.py中,并在任何需要的地方导入该模块 - 再使用上下文处理器将它们添加到上下文中。
答案 2 :(得分:1)
如果您需要视图中的数据,那么将中间件与上下文处理器结合使用会更清晰:
request.x
(example)。现在,您可以直接在视图中访问它。django.core.context_processors.request
中启用TEMPLATE_CONTEXT_PROCESSORS
,以便从您的模板访问request.x. 请参阅我的相关问题:Django: How to provide context to all views (not templates)?