2015-02-24 90 views
3

我正在使用django將圖像文件上傳到服務器。django模板上傳文件 - 如何處理不存在的物理文件

當用戶嘗試在django模板中查看丟失的圖像時,顯示的圖像只是破損,但我想顯示默認丟失的圖像文件。

如何處理物理文件被刪除(或只是丟失)的可能性,但該位置仍然存儲在數據庫中?

回答

2

使用文件存儲的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' }}" /> 
+0

catavaran,我得到錯誤消息''str'對象沒有屬性'storage'。我必須在過濾器文件中包含哪些import語句?另外,我將'@ register.simple_tag'改爲'@ register.filter()'。我在正確的軌道上嗎? – user3354539 2015-02-24 05:18:05

+0

對不起,當然應該是'@ reguster.filter'。至於'str'對象...'錯誤,我懷疑你把錯誤的屬性傳遞給過濾器。請在出現此錯誤的地方顯示模板片段。 – catavaran 2015-02-24 05:32:33

+0

可以肯定的是:您應該將圖像或文件對象傳遞給模板過濾器,而不是文件名。 – catavaran 2015-02-24 05:57:37

0

檢查使用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