Django-Weasyprint图像问题

Alv*_*aro 9 pdf django pdf-generation django-templates weasyprint

正如在文档页面中所说,我在我的html文件中定义了一个img标记,如下所示:

<img src='{% static 'image.png' %}'/>
Run Code Online (Sandbox Code Playgroud)

这个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
Run Code Online (Sandbox Code Playgroud)

html视图:

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

我认为默认的url fetcher应该找到并渲染图像(这是一个png - 所以不应该涉及任何格式问题)任何想法?任何帮助,将不胜感激!!

Sim*_*pin 27

究竟是什么问题?你在日志中得到了什么吗?(如果服务器未记录stderr,则可能需要配置日志记录.)生成的HTML是什么样的?

我真的需要上面的答案来确认,但我的猜测是图像的URL是相对的,但HTML(string=...)WeasyPrint不知道什么是基本URL.尝试这样的事情.(我不确定Django的细节.)

HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(response)
Run Code Online (Sandbox Code Playgroud)

这将在您的应用程序上发出真正的HTTP请求,这可能会在单线程服务器上死锁.(我认为开发服务器默认为单个线程.)

为了避免这种情况以及通过网络的成本,您可能需要考虑编写自定义的"URL fetcher".它可以是从专业到这一个图像的任何地方,到完全相当于Flask-WeasyPrint的 Django .