正如文档页面中所述,我在html文件中定义了一个img标记,如下所示:
<img src='{% static 'image.png' %}'/>
这个网址存在于服务器中,我甚至用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 - 所以不应该涉及格式问题) 有任何想法吗?任何帮助将不胜感激!!
答案 0 :(得分:27)
究竟是什么问题?你在日志中得到了什么吗? (如果您的服务器没有记录stderr,您可能需要configure logging。)生成的HTML是什么样的?
我真的需要上面的答案来确认,但我的猜测是图片的网址是相对的,但是HTML(string=...)
WeasyPrint不知道什么是基本网址。尝试这样的事情。 (我不确定Django的细节。)
HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(response)
这将在您的应用上发出真正的HTTP请求,这可能会在单线程服务器上死锁。 (我认为开发服务器默认为单个线程。)
为了避免这种情况以及通过网络的成本,您可能需要考虑编写自定义"URL fetcher"。它可以是从专用到这一个图像的任何地方,到完全相当于Flask-WeasyPrint的Django。