让我举个例子。我的views.py是这样的。
def view1(request):
if request.method == 'POST':
#gather form put in a list
li=[form_value1,form_value2]
#do something with li
return HttpResponse()# Have to use HttpResponse
# in that there is a link of view2
return render(request,'form.html',{})
def view2(request):
#here i want to use li again
我可以将其视为全球
def view1(request):
global li
li=[form_value1,form_value2]
或者我可以像这样使用
li = []
def view1(request):
li.append(form_value1)
def view2(request):
#extract li
在这两种情况下我都没有成功 所以请指导我。提前致谢
答案 0 :(得分:2)
会话是实现这一目标的最简单方法:
def view1(request):
if request.POST:
request.session['li'] = [form_value1,form_value2]
return HttpResponse()
return render(request,'form.html',{})
def view2(request):
li = request.session['li']
...
答案 1 :(得分:1)
您需要在响应中将值传递回客户端,然后在请求第2页时再返回到服务器。这可以通过cookie,隐藏的表单字段,嵌入在Javascript或许多其他选项中完成。
有很多方法可以解决这个问题,但所有这些方法都要求您的服务器具有状态。
下一个最佳选择是会话的概念。这是一个具有有限生命周期的每用户存储空间(通常在每次请求来自该用户时延长至--20分钟)。您可以在那里存储特定于用户的变量。这减轻了线程问题并限制了浪费的服务器资源。客户端被赋予唯一ID(通常在cookie中),用于在服务器上查找其会话数据。有关详细信息,请参阅Django Sessions。
如果您创建了一个全局变量,它将适用于您站点的所有用户,并且可以从多个线程访问(这意味着您需要了解所有常见的线程问题,如竞争条件)。
答案 2 :(得分:0)
li,因为无状态的Web服务器的性质。每个视图都处理一个请求,因此下一个视图将无法使用。您可以使用memcached存储li的值并在另一个视图中检索它,或者您可以查看会话。