Django:“在赋值前引用”但仅适用于某些变量

时间:2016-08-23 23:55:03

标签: python django

我正在Django中编写一个小应用程序,并且我将状态保存在我声明的views.py中的方法中的一些变量中。以下是此文件的重要部分:

from app.playerlist import fullList
auc_unsold = fullList[:]
auc_teams = []
auc_in_progress = []
auc_current_turn = -1
print(auc_in_progress)

def auc_action(request):
    data = json.loads(request.GET["data"])

    # ...

    elif data[0] == "start":
        random.shuffle(auc_teams)
        print(auc_unsold)
        print(auc_in_progress)
        auc_in_progress = [None, 0, None]
        print(auc_in_progress)

auc_unsoldauc_teams变量工作正常;但是,此方法看不到auc_in_progress变量,在标题中给出了错误。如果我取出print语句并让这段代码为它赋值,那么只要我再次使用该变量,代码中的异常就会被抛出。

我试过制作另一个变量,这个新变量似乎也遇到了这个问题。

发生了什么事?

编辑:我找到了一个解决方案:如果我在print语句之前写global auc_in_progress,那么一切正常。如果我尝试写这个,因为我声明上面的变量它不起作用,但由于某种原因。

我对此不满意,因为我不知道为什么会发生这种情况,因为我不喜欢这样使用全球,但是呃。有人有解释吗?

1 个答案:

答案 0 :(得分:1)

您绝对不应该使用原始代码或使用global建议的解决方案。

模块级别的任何内容都将在请求之间共享,不仅针对当前用户,还针对该流程的所有用户。所以每个人都会看到同样的拍卖等。

错误的原因是因为您在函数中分配了该变量,这会自动使其成为局部变量:有关详细信息,请参阅this question。但是那里建议的解决方案与你的解决方法相同 - 即使用global - 这里不合适;您应该将数据存储在与用户特定关联的某个位置,例如会话。