2010-11-12 51 views
0

正如標題所述。我在我的模板中構建圖像網址。有時圖像不在那裏。在這種情況下,我有一個默認圖像要顯示。Django在模板級處理不存在的網址

但是我如何處理模板級別的這種情況。也許寫一個過濾器?有其他方法嗎?

到目前爲止:

... 
{% for m in movies %} 
    <img width="54" height="74" src="/site_media/images/{{ m.id }}.jpg"></img> 
{% endfor %} 
... 

回答

2

是的,你可以寫自己的過濾器將其解析爲絕對路徑媒體路徑,然後再看是否有在那個位置的文件。

不過,我會強烈建議不要它在最壞的情況下,這將讀取磁盤數目不詳的時候,在每個請求。如果您有多臺服務器,則每臺服務器都需要擁有所有映像的副本。如果圖像是用戶上傳或在系統運行時創建的,則需要分發這些圖像。如果你真的走這條路線,你可以通過使用標準緩存機制緩存查找結果來改善這一點。

試想想起來了,你爲什麼不存儲在使用ImageField的模型中的圖像?在你的例子中,它看起來像你每個主鍵有一個圖像,所以使用ImageField是有意義的,除非你有其他限制。如果你讓這個字段是可選的,也許你可以這樣做:

<img src="{{ m.get_image_url|default:"/site_media/images/missing_image.jpg" }}" /> 
+0

這裏有一些好的一點。正如你所說,即使我爲我的需求編寫過濾器,我也可能會做出多次磁盤讀取。所以爲了防止它使用緩存或將整個圖像存儲在MySQL中。你認爲哪個更快? – 2010-11-12 12:30:22

+0

也不應該在傳統的rdms中存儲圖像。一些「NoSQL」數據庫擅長它,但總的來說這是一個壞主意。你應該做的是使用Djangos ImageField。它只會存儲圖像文件的路徑。該字段可以爲空,因此您可以在創建圖像url時檢查null。 – knutin 2010-11-12 13:13:46

+0

酷!我根據我們在這裏討論的內容做了一些事情。謝謝... – 2010-11-12 18:54:07