2010-11-16 2 views
0

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

В соответствии со всем, что я прочитал, неправильно использовать что-либо другое, что HttpResponseRedirect при работе с POST, поскольку страница, сгенерированная с помощью POST-данных, повторно представила форму, если страница была обновлена.

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

ответ

2

Вы можете поместить данные на request.session

http://www.djangobook.com/en/beta/chapter12/#cn36

http://docs.djangoproject.com/en/1.2/topics/http/sessions/

+0

Я не думал об этом. request.session поддерживается на стороне сервера, а не что-то действительно отправленное с самим запросом, поэтому это позволит мне хранить валиды данных, сгенерированных в этом отчете, и перенаправлять на страницу, которая отображает его. Я новичок в веб-разработке, и это не похоже на предполагаемое использование сеансов, но, похоже, это относительно элегантное решение этой проблемы. Благодарю. – Nathan

+0

Этот метод оказался очень гладким. Я просто поместил объект результатов, который я создал в request.session, а затем получаю доступ к нему в представлении, к которому я перенаправляю. – Nathan

0

Я предполагаю, что ваша ПОСТ ручка создает некоторый Databse объект из представленных данных формы, это правильно? Если это так, то вы можете сделать что-то вроде этого (:.

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') 
+0

Да, я подумал об этом, но фактическое поведение здесь - разобрать тысячи файлов журналов, создать тысячи объектов в базе данных и затем отобразить подробные сводные статистические данные. По этой причине трудно понять, как я могу указать на один объект, если только я не должен был создать объект специально для результата этой операции. Это могло бы быть лучшим долгосрочным решением для этого. – Nathan

+0

Ну, это похоже на естественный пример пакетной обработки - добавьте модель 'Batch' и сделайте каждый отдельный объект ссылкой на него с помощью ForeignKey, а затем используйте' batch.id' для перенаправления. –

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^