使用Django中的上下文处理器在视图中访问全局变量

las*_*hla 5 django django-views django-context

假设我有一个上下文处理器:

def title(request):
   return {'titles': 'mytitle'}
Run Code Online (Sandbox Code Playgroud)

我可以在模板中访问此变量{{ titles }}.

但是我怎么能在视野中这样做呢?

def myview(request):
    print request.titles
Run Code Online (Sandbox Code Playgroud)

似乎不起作用 - 'WSGIRequest' object has no attribute 'titles'


或者可能有更好的方法(比上下文处理器)在视图和模板中都可以访问全局变量?

提前致谢.

nar*_*ren 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 
Run Code Online (Sandbox Code Playgroud)

唯一的优势是"相同的变量'标题'将在模板和视图中可见"

  • 本例中的“app_config”是什么? (2认同)

Dan*_*man 6

上下文处理器无论如何都不是全局变量。它们只是在启动 RequestContext 时运行的函数,将项目添加到该上下文中。因此,它们仅在您有 RequestContext 的地方可用,即在模板中。

您的示例并不能很好地了解您要访问的变量。如果只是想在任何地方使用一些常量,一个好方法是在中心位置定义它们,比如在 settings.py 中,然后在需要的地方导入该模块 - 加上使用上下文处理器将它们添加到上下文中。

  • 多谢。我一直在寻找以这种方式定义常量并使用上下文处理器将它们添加到上下文中。 (2认同)