2013-10-01 9 views
8

Как говорится на странице Docs, я определил IMG тег в моем HTML файл следующим образом:Django-Weasyprint проблема изображения

<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 по умолчанию Fetcher мнимый был найти и сделать изображение (это png - поэтому вопрос о формате не должен быть задействован) Любые идеи? Любая помощь будет оценена!

ответ

25

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

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

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

Это позволит сделать реальный запрос HTTP на приложении, которое может ТУПИК на однопоточный сервере. (Я думаю, что сервер разработки по умолчанию имеет один поток.) ​​

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

+1

Добавление base_url = request.build_absolute_uri() полностью исправлено. Сервер dev обработал запрос просто отлично! Спасибо за Ваш быстрый ответ!!!! Отличное приложение;) – Alvaro