【问题标题】:how to add element in django list如何在 django 列表中添加元素
【发布时间】:2020-11-12 09:40:13
【问题描述】:

我对 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']

如果我们注释附加行并使用 += 的正确方式,我们也会得到相同的列表

但是,在重定向到任务/索引时,第一种方式显示一个空列表,第二种方式显示预期的列表。为什么?怎么回事?

【问题讨论】:

  • 会话['tasks'] 在哪里/如何定义?
  • 不错,少了一行。

标签: django list session


【解决方案1】:

Django 只保存会话数据并在它被分配或删除时发送给客户端。就像你的第二个例子一样:

request.session['tasks'] += [task]

如果您正在更新会话数据中的信息,它不会识别更改并且不会更新它,例如当您将一些数据附加到分配给“任务”键的列表时。在这种情况下,您需要明确告诉 Django 您修改了会话数据:

request.session.modified = True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2018-10-16
    • 2018-08-27
    相关资源
    最近更新 更多