就像在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。

07-24 20:57