就像在docs页面中所说的那样,我在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))
我以为默认的网址提取程序应该查找并呈现图像(它是png-因此不应该涉及格式问题)
有任何想法吗?任何帮助,将不胜感激!!
最佳答案
到底是什么问题?日志中有东西吗? (如果服务器未记录stderr,则可能需要configure logging。)生成的HTML是什么样的?
我确实需要上述答案来确认,但是我猜测图像的URL是相对的,但是使用HTML(string=...)
时,WeasyPrint并不知道基本URL是什么。尝试这样的事情。 (我不确定Django的详细信息。)
HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(response)
这将在您的应用上发出真实的HTTP请求,这可能会在单线程服务器上死锁。 (我认为开发服务器默认为单个线程。)
为了避免这种情况和网络开销,您可能需要考虑编写自定义的"URL fetcher"。它可以是任何地方,从专用图像到仅一张图像,再到与Flask-WeasyPrint完全等效的Django。