django全局变量

时间:2012-10-10 03:25:44

标签: python django django-views

在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 个答案:

答案 0 :(得分:15)

使用sessions。这正是它们的设计目标。

def foo(request):
   num = request.session.get('num')
   if not num:
      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 not num检查。

答案 1 :(得分:5)

你可以在其中一个函数之外声明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的原因。

答案 2 :(得分:0)

您也可以使用其他()方法中的全局关键字执行此操作,如下所示:

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

现在它将返回6.这意味着您想要使用全局变量的任何地方,您应该使用全局关键字来使用它。

答案 3 :(得分:0)

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

即可
from django.conf import settings
print settings.mysetting_here

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