19

在views.py

当我尝试这个从其他访问全局变量时def

def start(request):
    global num
    num=5
    return HttpResponse("num= %d" %num) # returns 5 no problem....

def other(request):
    num=num+1
    return HttpResponse("num= %d" %num)

def other 不返回 6,但应该是 6 对吗?如何在我的视图中全局访问变量?

4

4 回答 4

30

使用会话。这正是它们的设计目的。

def foo(request):
   num = request.session.get('num')
   if num is None:
      num = 1
   request.session['num'] = num
   return render(request,'foo.html')

def anotherfoo(request):
   num = request.session.get('num')
   # and so on, and so on

如果会话已过期,或会话num中不存在(未设置),request.session.get('num')则将返回None. 如果你想给num一个默认值,那么你可以这样做request.session.get('num',5)- 现在如果num没有在会话中设置,它将默认为5. 当然,当你这样做时,你不需要if num is None检查。

于 2012-10-10T04:01:13.633 回答
9

您可以在其中一个函数之外声明 num 。

num = 0
GLOBAL_Entry = None

def start(request):
    global num, GLOBAL_Entry
    num = 5
    GLOBAL_Entry = Entry.objects.filter(id = 3)
    return HttpResponse("num= %d" %num) # returns 5 no problem....

def other(request):
    global num
    num = num + 1
    // do something with GLOBAL_Entry
    return HttpResponse("num= %d" %num)

如果您分配给一个变量,您只需要使用 global 关键字,这就是您不需要global GLOBAL_Entry在第二个函数中的原因。

于 2012-10-10T03:26:59.407 回答
2

您可以打开 settings.py 并添加您的变量和值。在您的源代码中,只需添加这些行

from django.conf import settings
print settings.mysetting_here

现在您可以为所有项目全局访问您的变量。试试这个,它对我有用。

于 2017-11-24T09:18:05.643 回答
1

您也可以通过在other()方法中使用global关键字来执行此操作,如下所示:

def other(request):
   global num
   num = num+1
   return HttpResponse("num= %d" %num)

现在它会返回 6。这意味着无论你想在哪里使用全局变量,你都应该使用global关键字来使用它。

于 2017-08-11T03:23:17.803 回答