Вывод PDF с Django в качестве вложения и перезагрузка - PullRequest
1 голос
/ 27 октября 2010

Я использую django для создания pdf-файла и возврата ответа в виде вложения в виде.

response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'

Аналогично тому, как описано в документе (http://docs.djangoproject.com/en/dev/howto/outputting-pdf/#write-your-view)

Каков наилучший способ перезагрузить страницу?

Это не сработало (форма запускает генерацию PDF):

$('#the_form').submit(function(){
  location.reload();
});

Большое спасибо, Дэнни

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Не перезагружать.Вместо этого создайте представление, которое является целью формы.Представление генерирует PDF-файл в каталоге, который доставляется с реального веб-сервера, а затем отправляет пользователя по соответствующему URL-адресу, где он может загрузить файл (используйте HttpResponseRedirect).

0 голосов
/ 27 октября 2010

Просто установите цель формы для представления, которое генерирует PDF. Ниже я привел некоторые плюсы и минусы этого подхода против подхода, предложенного Мартином (для записи файлов в каталог, который может прочитать мир)

Плюсы:

  • Вы можете сделать аутентификацию или специальный биллинг или что-то еще
  • Каждый запрос будет генерировать новый PDF (если вы явно не кешируете его)

Минусы:

  • Каждый запрос генерирует новый PDF
  • Использование памяти
  • Вы должны передать файл из Django

-

Другим решением будет использование заголовка X-SendFile вашего веб-сервера. Выполните поиск в Google для получения инструкций для вашего конкретного сервера. Общая идея заключается в том, что ваш взгляд дает веб-серверу путь к файлу, который веб-сервер будет затем читать непосредственно с диска и возвращать пользователю. Вы, вероятно, можете «принудительно загрузить» даже эти файлы, посмотрите документацию для своего веб-сервера о том, как это сделать.

...