django模板上传文件 - 如何处理不存在的物理文件

时间:2015-02-24 02:41:04

标签: python django django-templates django-file-upload

我正在使用django将图像文件上传到服务器。

当用户尝试在django模板中查看丢失的图像时,只显示损坏的图像,但我想显示默认的缺失图像文件。

如何处理物理文件被删除(或只是丢失)的可能性,但该位置仍然存储在数据库中?

2 个答案:

答案 0 :(得分: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' }}" />

答案 1 :(得分: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