Проблема с изображением Django-Weasyprint

Как сказано на странице документации, я определил тег img в своем html-файле следующим образом:

<img src='{% static 'image.png' %}'/>

Этот URL-адрес существует на сервере, и я даже сделал другое представление с ответом http, и изображение отображается просто отлично. Вот код для обоих представлений:

Вид pdf-weasyprint:

def card_view(request):
    template = loader.get_template('card.html')
    context = {'sample': None
               }
    html = template.render(RequestContext(request, context))
    response = HttpResponse(mimetype='application/pdf')
    HTML(string=html).write_pdf(response)
    return response

HTML-представление:

def card_view2(request):
    context = {'sample': None,
               }
    return render_to_response('card.html', context, 
                              context_instance=RequestContext(request))

Я думал, что сборщик URL-адресов по умолчанию должен найти и отобразить изображение (это png, поэтому проблема с форматом не должна возникать). Есть идеи? Любая помощь будет оценена!!


person Alvaro    schedule 01.10.2013    source источник


Ответы (1)


В чем именно проблема? Вы получаете что-нибудь в журналах? (Возможно, вам потребуется настроить ведение журнала, если ваш сервер не ведет журнал stderr.) Как выглядит сгенерированный HTML?

Мне действительно нужны ответы на вышеизложенное, чтобы подтвердить, но я предполагаю, что URL-адрес изображения является относительным, но с HTML(string=...) WeasyPrint не знает, что такое базовый URL-адрес. Попробуйте что-нибудь вроде этого. (Я не уверен в деталях Django.)

HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(response)

Это сделает настоящий HTTP-запрос к вашему приложению, который может заблокироваться на однопоточном сервере. (Я думаю, что сервер разработки по умолчанию использует один поток.)

Чтобы избежать этого и затрат на прохождение через сеть, вы можете написать собственный "сборщик URL". Это может быть что угодно: от специализированного до одного этого изображения или полного Django-эквивалента Flask-WeasyPrint.

person Simon Sapin    schedule 04.10.2013
comment
Добавление base_url=request.build_absolute_uri() полностью исправило ситуацию. Сервер разработки отлично обработал запрос! Спасибо за Ваш быстрый ответ!!!! Отличное приложение ;) - person Alvaro; 04.10.2013