【发布时间】:2015-04-25 13:47:38
【问题描述】:
我正在使用 django 将图像文件上传到服务器。
当用户尝试在 django 模板中查看丢失的图像时,只显示损坏的图像,但我想显示默认的丢失图像文件。
如何处理物理文件被删除(或只是丢失)但位置仍存储在数据库中的可能性?
【问题讨论】:
标签: python django django-templates django-file-upload
我正在使用 django 将图像文件上传到服务器。
当用户尝试在 django 模板中查看丢失的图像时,只显示损坏的图像,但我想显示默认的丢失图像文件。
如何处理物理文件被删除(或只是丢失)但位置仍存储在数据库中的可能性?
【问题讨论】:
标签: python django django-templates django-file-upload
使用文件存储的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' }}" />
【讨论】:
'str' object has no attribute 'storage'。我必须在过滤器文件中包含什么导入语句?另外,我将@register.simple_tag 更改为@register.filter()。我在正确的轨道上吗?
@reguster.filter。至于'str' object... 错误,我怀疑您将错误的属性传递给过滤器。请显示出现此错误的模板片段。
<img src="{{ attachment_detail.attachment_document.url|default_image:'{{ STATIC_URL }}img/attachments/attachment_not_uploaded.png' }}" />
url 部分并在模板过滤器中添加STATIC_URL,如我的示例:{{ attachment_detail.attachment_document|default_image:'img/attachments/attachment_not_uploaded.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
【讨论】: