2015-02-24 88 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