Как создать выходной файл PDF в выбранной директории с помощью Hardcopy в Django? - PullRequest
1 голос
/ 12 февраля 2020

Я хотел бы автоматически сохранить результат в PDF-файл в выбранной директории. Я использую модуль django -hardcopy. В настоящее время я могу отобразить PDF с URL. Спасибо за ваши идеи.

Вот мнение:

from django.conf import settings
from hardcopy.views import PDFViewMixin, PNGViewMixin

class pdf_hardcopy(PDFViewMixin, TemplateView):
    download_attachment = True
    template_name = 'project/pdf_hardcopy.html'

    def get_filename(self):
        return "my_file.pdf"

    def get_context_data(self, *args, **kwargs):
        context = super(pdf_hardcopy, self).get_context_data(*args, **kwargs)
        id = self.kwargs['pk']
        dossier_media = str(settings.MEDIA_ROOT)
        GetDataTeam = Datas.objects.filter(id=id)
        context["GetDataTeam"] = GetDataTeam
        return context

Мой URL:

path('pdf_hardcopy/<int:pk>/', views.pdf_hardcopy.as_view(), name='pdf_hardcopy'),

1 Ответ

1 голос
/ 12 февраля 2020

Беглый взгляд на репо, не похоже, что есть какой-то встроенный способ сделать это. Я бы, вероятно, переопределил метод PDFViewMixin get_file_response. Вы можете увидеть текущую реализацию в файле views.py [ github link ].

Вы можете сделать что-то подобное в вашем файле views.py:

class PDFViewAndSaveMixin(PDFViewMixin):
    """Override PDFViewMixin to also save file."""

    def get_file_response(self, content, output_file, extra_args):
        with open(f'save/location/{self.get_filename}', ‘w’) as local_file:
            local_file.write(output_file)
        return super().get_file_response(content, output_file, extra_args)


class pdf_hardcopy(PDFViewAndSaveMixin, TemplateView):
    # ...

Это довольно грубый способ сохранения файла, и вам, вероятно, следует создать модель Django с FileField для управления этими файлами, а не просто записать их непосредственно на диск. См. Django документы по управлению файлами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...