如何在django列表中添加元素
how to add element in django list
我对 Django 向列表中添加元素的方式感到困惑。考虑以下因素:
def add(request):
if request.method == "POST":
form = NewTaskForm(request.POST)
if form.is_valid():
task = form.cleaned_data["task"]
request.session['tasks'].append(task)
# request.session['tasks'] += [task]
return HttpResponseRedirect(reverse("tasks:index"))
else:
return render(request, "tasks/add.html",{
"form": form
})
return render(request, "tasks/add.html",{
"form": NewTaskForm()
})
如果我们在 request.session['tasks'].append(task) 之后添加打印语句,我们会得到一个列表:
['check email']
如果我们注释附加行并使用 +=
的正确方式,我们也会得到相同的列表
但是,在重定向到 task/index 时,第一种方式显示空列表,第二种方式显示预期的列表。为什么?怎么回事?
Django 仅保存会话数据并在已分配或删除时发送给客户端。就像你的第二个例子:
request.session['tasks'] += [task]
如果您正在更新会话数据中的信息,它不会识别更改并且不会更新它,就像您将一些数据附加到分配给 'tasks' 键的列表时一样。在这种情况下,您需要明确地告诉 Django 您使用以下方式修改了会话数据:
request.session.modified = True
我对 Django 向列表中添加元素的方式感到困惑。考虑以下因素:
def add(request):
if request.method == "POST":
form = NewTaskForm(request.POST)
if form.is_valid():
task = form.cleaned_data["task"]
request.session['tasks'].append(task)
# request.session['tasks'] += [task]
return HttpResponseRedirect(reverse("tasks:index"))
else:
return render(request, "tasks/add.html",{
"form": form
})
return render(request, "tasks/add.html",{
"form": NewTaskForm()
})
如果我们在 request.session['tasks'].append(task) 之后添加打印语句,我们会得到一个列表:
['check email']
如果我们注释附加行并使用 +=
的正确方式,我们也会得到相同的列表但是,在重定向到 task/index 时,第一种方式显示空列表,第二种方式显示预期的列表。为什么?怎么回事?
Django 仅保存会话数据并在已分配或删除时发送给客户端。就像你的第二个例子:
request.session['tasks'] += [task]
如果您正在更新会话数据中的信息,它不会识别更改并且不会更新它,就像您将一些数据附加到分配给 'tasks' 键的列表时一样。在这种情况下,您需要明确地告诉 Django 您使用以下方式修改了会话数据:
request.session.modified = True