我正在使用django將圖像文件上傳到服務器。django模板上傳文件 - 如何處理不存在的物理文件
當用戶嘗試在django模板中查看丟失的圖像時,顯示的圖像只是破損,但我想顯示默認丟失的圖像文件。
如何處理物理文件被刪除(或只是丟失)的可能性,但該位置仍然存儲在數據庫中?
我正在使用django將圖像文件上傳到服務器。django模板上傳文件 - 如何處理不存在的物理文件
當用戶嘗試在django模板中查看丟失的圖像時,顯示的圖像只是破損,但我想顯示默認丟失的圖像文件。
如何處理物理文件被刪除(或只是丟失)的可能性,但該位置仍然存儲在數據庫中?
使用文件存儲的exists()
方法文件對象。例如,如果像場的名稱是image
的代碼如下:
if obj.image.storage.exists(obj.image.name):
...
爲了簡化事情,你可以創建一個custom template filter:
from django.conf import settings
@register.filter
def default_image(image, default_file):
if image.storage.exists(image.name):
return image.url
return settings.STATIC_URL + default_file
然後用正確的模板:
<img src="{{ obj.image|default_image:'no-image.png' }}" />
檢查使用python
file_obj = Model.objects.get(id=1)
if os.path.exists(file_obj.file):
file_path = file_obj.file
else:
file_path = default_path
catavaran,我得到錯誤消息''str'對象沒有屬性'storage'。我必須在過濾器文件中包含哪些import語句?另外,我將'@ register.simple_tag'改爲'@ register.filter()'。我在正確的軌道上嗎? – user3354539 2015-02-24 05:18:05
對不起,當然應該是'@ reguster.filter'。至於'str'對象...'錯誤,我懷疑你把錯誤的屬性傳遞給過濾器。請在出現此錯誤的地方顯示模板片段。 – catavaran 2015-02-24 05:32:33
可以肯定的是:您應該將圖像或文件對象傳遞給模板過濾器,而不是文件名。 – catavaran 2015-02-24 05:57:37