我正在使用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