在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对吗?如何在视图中全局访问变量?
答案 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
现在,您可以全局访问所有项目的变量。 试试这个,它对我有用。