12

ドキュメント ページにあるように、html ファイルに img タグを次のように定義しました。

<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フェッチャーは画像を見つけてレンダリングするはずだと思っていました(これはpngなので、フォーマットの問題は関係ありません)何かアイデアはありますか?どんな助けでも大歓迎です!!

4

2 に答える 2

28

問題は正確には何ですか?ログに何かが記録されていますか? (サーバーが stderr をログに記録しない場合は、ログを構成する必要がある場合があります。) 生成された HTML はどのようになりますか?

確認するには、上記の回答が本当に必要ですが、画像の URL は相対的であると推測されますが、HTML(string=...)WeasyPrint ではベース URL が何であるかがわかりません。このようなことを試してください。(Djangoの詳細はわかりません。)

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

これにより、アプリで実際の HTTP 要求が行われ、シングル スレッド サーバーでデッドロックが発生する可能性があります。(開発サーバーはデフォルトでシングルスレッドになっていると思います。)

それとネットワークを通過するコストを回避するには、カスタムの「URL fetcher」の作成を検討することをお勧めします。この 1 つの画像だけに特化したものから、 Flask-WeasyPrintに相当する完全な Django まで、どこでもかまいません。

于 2013-10-04T05:54:10.730 に答える