【问题标题】:django how to use a variable globallydjango如何全局使用变量
【发布时间】: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

【问题讨论】:

    标签: python django


    【解决方案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】:

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

    这是另一个关于此的 stackoverflow。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多