Базовый URL-адрес для Django, Behind Nginx Proxy

У меня есть простое Djangoприложение, которое размещено позади Nginx. Я использую weasyprintдля создания отчетов в формате PDF. weasyprintтребуется base_urlсвойство доступа к staticфайлам.

В то время как ниже djangoкод прекрасно работает на локальной машине (под Dev сервера), я получаю 502 Bad Gateway ошибка при публикации его за HTML = render_to_string ( «админ / запрос / quoterequest / generate.html» , { «запрос» : запрос }) ответ = HttpResponse ( content_type = 'application / pdf' ) response [ 'Content-Disposition' ] = 'filename = "Запрос _ {}. Pdf' . Format ( запрос . Ссылка ) weasyprint . HTML ( string = html , base_url = request . Build_absolute_uri ()). write_pdf ( response , stylesheets = [ weasyprint . CSS ( настройки . STATICFILES_DIRS [ 0 ] + '/css/print.css ])) .

base_url

nginx

Вышеприведенный код работает отлично (без печати изображений), если я удалю base_urlатрибут. Поблагодарю ваш вклад - либо как настроить, либо извлечь из Django# configuration of the server server { listen 80; server_name 192.168.33.10; # Vagrant IP root /home/www/my_project; charset utf-8; client_max_body_size 75M; # max upload size location /media { alias /home/www/my_project/assets/uploads; } location /static { alias /home/www/my_project/assets/static; } location / { proxy_pass http://localhost:8001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }@page { size: letter; margin: 1.5in .25in 1.9in .5in; @top-center { content: url("/uploads/header_footer/header.jpg"); height: 100%; width: 100%; } @bottom-center { background-image: url("/uploads/header_footer/footer.jpg"); background-repeat: no-repeat; background-position: center; content: "Page " counter(page); height: 100%; width: 100%; vertical-align: bottom;; } }

Nginx Config

nginx

print.css

upstream prematurely closed connection while reading response header from upstream, client: 192.168.33.1, server: 192.168.33.10, request: "GET /enquiry/admin/enquiry/quoterequest/view/1/ HTTP/1.1", upstream: "http://127.0.0.1:8001/enquiry/admin/enquiry/quoterequest/view/1/", host: "192.168.33.10", referrer: "http://192.168.33.10/admin/enquiry/quoterequest/"

Это сообщение об ошибке из nginxжурнала.

http://192.168.33.10/media/'

python,django,nginx,weasyprint,

4

Ответов: 2


1

Отвечая на мои собственные, но это своего рода обходное решение ». Для этого ip 192.168.33.10 , и для его базового адреса parameter forweasyprint . HTML ( строка = html , base_url = 'http://192.168.33.10/media/' ). write_pdf ( response ) template< img src = "http: // {{request.META.HTTP_HOST}} {{MEDIA_URL}} {{myapp.mymodel.my_image}}" > `все еще есть проблемы - даже вручную вводит базовый адрес didn Не трюк.

Это все еще не работает и возвращается с 502 Bad Gateway

context_instance

Поэтому я решил изменить View.py. Поэтому, когда у меня есть URL-адрес, я изменил их на ...

MEDIA_URL

и добавил weasyprintв мой, View.pyчтобы получить base_url. Надеюсь , кто - то придет с ответом на weasyprint«ы проблемы.html = render_to_string('admin/enquiry/quoterequest/generate.html', {'enquiry': enquiry}, context_instance=RequestContext(request)) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'filename="Enquiry_{}.pdf'.format(enquiry.reference) weasyprint.HTML(string=html,base_url=request.build_absolute_uri()).write_pdf(response, stylesheets=[ weasyprint.CSS(settings.STATICFILES_DIRS[0] + '/css/print.css')])

base_url

0

У меня была аналогичная проблема с WeasyPrint, и я обнаружил, что base_urlэто учитывается только в том случае, если URL-адреса не являются абсолютными .

Мое обходное решение заключалось в создании пользовательского тега шаблона Django для перевода их в абсолютный путь к файловой системе, если в контексте absolute_pathsприсутствует правка . Между тем у меня возник вопрос о моем собственном проблемном сценарии .

Надеюсь это поможет!

питон, Джанго, Nginx, weasyprint,
Похожие вопросы