Я изо всех сил пытаюсь правильно использовать Django WeasyPrint при экспорте шаблона в PDF.
Эта проблема возникает только в версии PythonAnywhere, использование представления localhost
работает по назначению. Использование любого другого представления с теми же таблицами стилей в PythonAnywhere также работает нормально.
Ошибки возникают при загрузке этих двух ресурсов:
<link rel="stylesheet" href="{% static 'css/boostrap4.5.2.css' %}">
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
(примечание: изначально я использовал cdn для bootstrap css, но обнаружил запрещенную ошибку 403, когда WeasyPrint попытался получить ее, и отказался от этой ошибки)
Вот журнал ошибок, когда weasyprint пытается использовать его:
Failed to load stylesheet at http://kirkmania.pythonanywhere.com/static/css/boostrap4.5.2.css : timeout: timed out
Failed to load stylesheet at http://kirkmania.pythonanywhere.com/static/css/blog.css : timeout: timed out
А вот лог сервера:
SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /cv/export (ip 10.0.0.52) !!!
uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 306] during GET /cv/export (10.0.0.52)
SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /static/css/boostrap4.5.2.css (ip 10.0.0.52) !!!
uwsgi_response_write_headers_do(): Broken pipe [core/writer.c line 248] during GET /static/css/boostrap4.5.2.css (10.0.0.52)
SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /static/css/blog.css (ip 10.0.0.52) !!!
uwsgi_response_write_headers_do(): Broken pipe [core/writer.c line 248] during GET /static/css/blog.css (10.0.0.52)
Я не взаимодействовал с материалами wsgi, честно говоря, понятия не имею, что со всем этим происходит. Я думаю, что на Weasyprint url_fetcher
истекает 10-секундный тайм-аут, чего не должно быть.
Вот мой код просмотра weasprint:
class ExportPDF(WeasyTemplateView):
template_name='online_cv/export.html'
def get_context_data(self, **kwargs):
context = super(ExportPDF, self).get_context_data(**kwargs)
self.educations = cvEducation.objects.filter(user=self.request.user).order_by('-start_date')
self.jobs = cvWorkHistory.objects.filter(user=self.request.user).order_by('-start_date')
...
context['educations'] = self.educations
context['jobs'] = self.jobs
...
return context