背景: 私はDjangoから始めており、Pythonの経験は限られているので、ご容赦ください。定期的に(cronジョブで)実行してSQLite3データベースにデータを格納するPythonスクリプトを作成しました。このデータベースから、Matplotlib(より具体的にはBasemap)を使用して画像を読み取り、生成します。これは、Pythonを学び、「興味深い」十分なプロジェクトを構築することへの関心として始まりました。Djangoフレームワークを選択しているのは、十分に文書化されているように見えるからです。ただし、要件が「軽量」であるため、web.pyにはうれしい驚きがありました(ただし、web.pyの文書化が少ないため、最初から始めるのが少し難しくなっています)。 ; しかし、現時点では、私はフレームワークに完全に行き詰まっているわけではありません。
問題の例1874642はほぼ私が探しているものであり、画像をディスクに書き込む必要なしにオンザフライで生成されます(したがって、生成されたファイルを定期的にクリーンアップする必要があります)。
ただし、ブラウザに画像を表示させるのではなく、生成された画像をテンプレートに組み込む方法がわかりません。django.template.Context
チュートリアル資料から、いくつかに組み込まれている変数を表現できるはずだと思いますdjango.http.HttpResponse
が、参照されている例では、コンテキストで構築するのではなく、Mimeオブジェクトで直接応答することでショートカットを作成しています。
だから私が求めているのは:
print_png
生成されたMatplotlibFigureCanvas
オブジェクトでを呼び出す必要がありますか?または、FigureCanvas
コピーされたものがコンテキストに「印刷されていない」ので、Djangoテンプレートで明示的にHTMLimg
タグを記述し、タグの属性を手動で配置しますか?HTMLタグがDjangoテンプレートでCanvasを認識できるように、Canvasをディスクに書き込む(つまり、を実行する)必要があるという印象を受けています。しかし、「より管理しやすい方法」がないことを確認したいと思います。つまり、画像を
canvas.print_figure("image.png")
img
Context
テンプレートを「魔法のように」生成します。本当にディスクに書き込む必要がある場合は、Djangoのファイルシステムキャッシュ機能を使用して、生成されたイメージを何らかの方法で書き込むことができると思います(もちろん、特定の入力パラメーターセットに対してイメージが既に書き込まれているかどうかを確認します)。現時点では生成されるイメージのサイズと数がまだ明確ではないため、この点に関する提案を歓迎します。したがって、ディスクスペースを消費することを避け、代わりにイメージが生成されるのを待つことを望んでいます(数秒かかる場合でも)。
前もって感謝します。