Создайте несколько PDF-файлов из представления Django с помощью Weasyprint

Когда пользователь нажимает кнопку загрузки, я хочу создать несколько PDF-файлов. В настоящее время я могу создать только один PDF-файл.

Я хочу создать два PDF-файла из представления Django, когда пользователь нажимает кнопку загрузки с помощью weasyprint.

Ниже код генерирует только один PDF

def get(self, *args, **kwargs):
    obj = self.get_object()
    html_result = super(GenerateInvoicePDFView, self).get(*args, 
    **kwargs)
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="%s.pdf"' % 
    obj.name
    weasyprint.HTML(string= html_result.getvalue()).write_pdf(response)
    return response

Этот ответ должен создать два PDF-файла, возможно ли это? Пожалуйста, помогите Спасибо


person Akshay Sharma    schedule 02.09.2017    source источник
comment
вы можете создать архив или многостраничный файл PDF, но нет возможности вернуть несколько файлов по ответу   -  person Brown Bear    schedule 02.09.2017
comment
Возможный дубликат Загрузить несколько файлов одним действием   -  person Pythonist    schedule 02.09.2017


Ответы (1)


Вы не можете вернуть несколько файлов в ответ. Единственное решение, которое я вижу, это заархивировать их, отправить пользователю по электронной почте или создать две отдельные кнопки загрузки.

Как насчет:

Посмотреть:

def get(self, *args, **kwargs):
    if 'file-1' in self.request.GET:
        obj = self.get_object(file='file-1')
    else:  # I assume you always want to download some file
        obj = self.get_object(file='file-2')

    html_result = super(GenerateInvoicePDFView, self).get(*args, 
    **kwargs)
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="%s.pdf"' % 
    obj.name
    weasyprint.HTML(string= html_result.getvalue()).write_pdf(response)
    return response

шаблон:

<form action="" method="get">
    {{ form }}
    <input type="submit" name="file-1" value="Download file 1" />
    <input type="submit" name="file-2" value="Download file 2" />
</form>
person Pythonist    schedule 02.09.2017
comment
Ох! Я не могу заставить их обоих скачиваться в один клик - person Akshay Sharma; 02.09.2017
comment
Итак, какой подход подойдет вам лучше всего? Объединить эти 2 PDF-файла в один, заархивировать их или отправить по электронной почте? - person Pythonist; 02.09.2017
comment
HTTP не поддерживает одновременную загрузку более одного файла. Помимо решений, которые я перечислил в предыдущем комментарии, вы можете привязать JavaScript к своей кнопке, поэтому при одном нажатии будут открываться 2 отдельные вкладки и запускаться 2 действия загрузки. Не могу думать ни о чем другом в этот момент. Но заархивировать их — лучшее решение, так как оно будет работать в любом браузере. - person Pythonist; 02.09.2017
comment
@Pythonist Как бы вы поступили с возможностью объединения PDF-файлов в один или их архивирования? - person Abedy; 27.08.2019