django如何全局使用变量

Posted

技术标签:

【中文标题】django如何全局使用变量【英文标题】:django how to use a variable globally 【发布时间】:2015-05-01 18:18:52 【问题描述】:

我的一个视图中有一个变量

def ViewName(request):
      simple_variable = request.session['value']

在同一个views.py文件中,我有另一个视图

def AnotherViewName(request):
    --------------------
    --------------------

现在我想在我的AnotherViewName 视图中使用变量simple_variable,我已经尝试过

def AnotherViewName(request):
     global simple_variable

但是,它不起作用,现在我的问题是,我如何在 Django 中使用从一个视图到另一个视图的变量,或者如何全局使用变量?

提及simple_variable 存储来自session 的值,最初我必须在上面给出的ViewName 视图中调用它。

我正在使用 django 1.5

【问题讨论】:

【参考方案1】:

我认为你可以这样做:

simple_variable = initial_value 

def ViewName(request):
    global simple_variable
    simple_variable = value
    ...

def AnotherViewName(request):
    global simple_variable

【讨论】:

提到,我的simple_variable 没有首字母,我必须以这种方式将值从我的ViewName 内的会话中存储在这个变量中 def ViewName(request): simple_variable = request.会话['值'] @Rego 你可以设置 simple_variable = None。并在你的视图函数中更新它。 这在多线程/处理环境中不会有问题吗? 在中间件中添加会话,它可以作为整个项目的全局变量【参考方案2】:

视图之间没有共享状态,因为它们可能在另一个线程中运行。因此,如果您想在视图之间共享数据,您必须使用数据库、文件、消息队列或会话。

这是另一个关于此的 ***。 How do you pass or share variables between django views?

rego 编辑问题后更新:

你不能这样吗?

def ViewName(request):
     simple_variable = request.session['value']

def AnotherViewName(request):
     simple_variable = request.session['value']

【讨论】:

我不能这样做,因为我必须确保我通过变量传递的值必须是永久的,因为我们知道存储在 session 中的任何内容都是临时的。所以我可以t. 事实上,我打算在我的download 视图之一中使用这个变量,现在我们知道用户可以随时下载内容,他/她不必在会话。 我明白,但全局变量不是您通常应该使用的东西。我认为我们需要更多信息来了解您的目标是什么,以制定更好的解决方案。【参考方案3】:

或者您可以使用session。

def ViewName(request):
      #retrieve your value
      if 'value' in request.session:
          simple_variable = request.session['value']

def AnotherViewName(request):
    #set your varaible
    request.session['value'] = simple_variable

【讨论】:

以上是关于django如何全局使用变量的主要内容,如果未能解决你的问题,请参考以下文章

Django学习之全局变量

在 Django 中全局存储动态变量

如何全局禁用 Django 模板的自动转义?

Django:如何在模板中获取语言代码?

Django 设置全局变量(所有视图函数模板都可以使用)

forin循环的变量如何变为全局