Django Weasyprint: ошибка тайм-аута при загрузке css, когда сайт размещен на PythonAnywhere

Я изо всех сил пытаюсь правильно использовать 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

person Kirkmania    schedule 27.08.2020    source источник


Ответы (1)


Вам необходимо настроить weasyprint для использования прокси-сервера PythonAnywhere. Посмотрите документацию по библиотекам, которые вы используете, чтобы узнать, как это сделать. Детали, которые вам нужно использовать, находятся здесь

person Glenn    schedule 29.08.2020