#django #list #session
#django #Список #сессия
Вопрос:
Я смущен тем, как 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(задача), мы получим список:
['check email']
мы также получим тот же список, если прокомментируем строку добавления и используем правильный способ с =
Однако при перенаправлении на task / index первый способ показывает пустой список, а второй — ожидаемый список. Почему? Что происходит?
Комментарии:
1. Где / как определяются сеансы [‘задачи’]?
2. хороший улов, не хватает строки.
Ответ №1:
Django сохраняет данные сеанса и отправляет клиенту только в том случае, если они были назначены или удалены. Как в вашем втором примере:
request.session['tasks'] = [task]
Если вы обновляете информацию внутри данных вашего сеанса, она не распознает изменение и не обновит его, например, когда вы добавляете некоторые данные в список, назначенный ключу «задачи». В этом случае вам нужно явно сообщить Django, что вы изменили данные сеанса с помощью:
request.session.modified = True