背景:我從Django開始,對Python的使用經驗有限,所以請耐心等待。我寫了一個定期運行(在cron作業中)的Python腳本,用於將數據存儲到SQLite3數據庫中,從中讀取數據並使用Matplotlib(更具體地說,使用Basemap)生成圖像。這開始是爲了學習Python並建立一個「有趣」的項目。我選擇了Django框架,因爲它看起來合理有效,儘管我對web.py感到驚喜,因爲它的要求是「輕量級」(但是web.py的稀疏文檔使得它更難以開始) ;但目前,我並不完全死在一個框架上。如何在Django模板中使用Matplotlib圖像?
question 1874642中的示例幾乎是我正在尋找的一個圖像,它可以在運行中生成而不需要將其寫入磁盤(因此不得不定期清理生成的文件) 。
但是,我不清楚的是如何將生成的圖像合併到模板中,而不是讓瀏覽器簡單地顯示圖像。從教程材料中,我猜測應該可以將一些django.template.Context
中包含的變量表示爲django.http.HttpResponse
,但引用的示例通過直接使用Mime對象進行快速響應而不是使用Context來構建它。
那麼,我要問的是:
是否需要調用生成Matplotlib
FigureCanvas
對象的print_png
?或者FigureCanvas
複製到上下文的「未打印」,所以在Django模板中,我明確地寫了HTMLimg
標記並手動輸入標記的屬性?我,我有寫畫布到磁盤的印象(即做一個
canvas.print_figure("image.png")
),使HTMLimg
標籤看到它在Django模板。但我想確保沒有「更易於管理的方式」 - 即傳遞Context
中的圖像並讓模板「神奇地」生成它。如果真的有必要寫入磁盤,我想我可以使用Django的文件系統緩存工具以某種方式編寫生成的圖像(當然,檢查圖像是否已經寫入給定的輸入參數集)。我歡迎您就此提出建議,因爲目前尚不清楚將生成的圖像的大小和數量,因此我期望避免花費磁盤空間,而寧願等待生成圖像(即使需要幾秒鐘)。
在此先感謝您。
避免將文件寫入磁盤的一種方法是使用數據URI方案,如http://en.wikipedia.org/wiki/Data_URI_scheme中所述。有必要將圖像作爲字節數組導出,並將其編碼爲Base64,並從中製作圖像URI。該鏈接還指出了一些缺點。 – jbatista 2013-06-29 09:39:49
此處顯示的解決方案如下: http://stackoverflow.com/questions/16819805/creating-html-wrapper-in-django-for-matplotlib-images – 2015-03-21 19:44:49