Как отобразить данные, полученные в результате POST в представлении Django?
У меня есть форма, которая принимает путь в качестве входных данных, анализирует файлы и подпапки в этом каталоге, сохраняет информацию в базе данных, а затем отображает некоторую статистику пользователю о только что проанализированных файлах. В настоящее время это делается с использованием представлений Django и render_to_response.
В соответствии со всем, что я прочитал, неправильно использовать что-либо кроме HttpResponseRedirect при работе с POST, так как страница, созданная с данными POST, повторно отправит форму, если страница будет обновлена.
Моя проблема здесь заключается в том, что в результате анализа файлов по указанному пути в конечном итоге отображается большое количество сводных данных. Как я могу отобразить эти данные с помощью httpResponseRedirect? Отправка в виде параметров GET с использованием django.core.urlresolvers.reverse
кажется невозможным из-за количества данных.
3 ответа
Вы можете поставить данные на request.session
Я предполагаю, что ваш дескриптор POST создает некоторый объект базы данных из отправленных данных формы, это правильно? Если это так, то вы можете сделать что-то вроде этого (:
my_obj = MyModel.objects.create(**form.cleaned_data) # This is the part yuo already have, most probably expressed with some other code, but still..
return HttpResponseRedirect('/url/to/redirect/?id=%d' % obj.id)
Как и в случае перенаправления, на самом деле должна использоваться функция reverse(), и я думаю, что у вас должен быть URL для редактирования объектов MyModel. Тогда вы могли бы сделать:
return HttpResponseRedirect(reverse('edit-mymodel', (), {'id': obj.id}))
Соответствующий URL будет выглядеть так:
url('^edit/mymodel/(?P<id>\d+)$', 'apps.myapp', name='edit-mymodel')
Грубое, но простое решение - записать ваши данные в текстовый файл json, а затем прочитать их на странице перенаправления (это также избавит вас от восстановления данных при обновлении страницы).