Как отобразить данные, полученные в результате POST в представлении Django? - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть форма, которая принимает путь в качестве входных данных, анализирует файлы и подпапки в этом каталоге, сохраняет информацию в базе данных, а затем отображает некоторую статистику пользователю о только что проанализированных файлах.В настоящее время это делается с использованием представлений Django и render_to_response.

В соответствии со всем, что я прочитал, неправильно использовать что-либо, кроме HttpResponseRedirect, при работе с POST, поскольку страница, созданная с данными POST, будет повторно отправлять форму, если страница обновлена.Моя проблема здесь заключается в том, что в результате анализа файлов по указанному пути в конечном итоге отображается большое количество сводных данных.Как я могу отобразить эти данные с помощью httpResponseRedirect?Отправка его в виде параметров GET с использованием django.core.urlresolvers.reverse представляется невозможной из-за объема данных.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010
0 голосов
/ 17 ноября 2010

Грубое, но простое решение - записать ваши данные в текстовый файл json, а затем прочитать их на странице перенаправления (это также избавит вас от восстановления данных при обновлении страницы)

0 голосов
/ 17 ноября 2010

Я предполагаю, что ваш дескриптор 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')
...