如何检查媒体文件夹中是否存在文件?

时间:2020-03-22 06:08:53

标签: django django-templates

我在这里成功上传了数据库中的文件(工作正常)。这里的问题是文件存储在数据库中,如果万一删除了媒体文件夹,它将引发错误[WinError 2] The system cannot find the file specified: ...。所以我的问题是如何处理此错误。

如果文件在数据库中,但不在媒体文件夹中,那么我要处理此错误并显示没有错误的模板。我该怎么办?

模板

{% for document in documents %}
 <tr>
<td>{{forloop.counter}}</td>
 <td>{{document.filename|truncatechars:15}}</td>
 <td>{{document.file.size|filesizeformat}}</td>
 <td>{{document.category}}</td>
 <td>{{document.file.url}}</td>
<tr>
{% endfor %}

模型

class Document(models.Model):
    category = models.ForeignKey(DocumentCategory, on_delete=models.CASCADE)
    file = models.FileField(upload_to='media/',
                            validators=[FileExtensionValidator(['pdf', 'xlsx', 'pptx', 'docx','xls']), file_size])
    created = models.DateTimeField(auto_now_add=True)


    @property
    def filename(self):
        return os.path.basename(self.file.name)           

2 个答案:

答案 0 :(得分:1)

您可以使用default_storage.exists(path)来确定。

 from django.core.files.storage import default_storage
 path = 'path/to/file'
 default_storage.exists(path)

但是请注意,您的路径必须在项目文件夹中。

如果文件存在于路径中,则该函数返回True,否则返回False

并且Django FileFeild中有一个path属性来获取路径。

答案 1 :(得分:0)

  1. Django不应在产品上提供媒体文件,因此与读取常规媒体文件相关的其他代码没有太大意义

  2. self.file.name包含MEDIA_ROOT的相对路径相对,因此,已实现的方法并不正确

  3. 由于您了解os.path,因此您实际上并不清楚要问什么;有path.exists方法,更具体的os.path.isfile

  4. 与Python中的任何其他异常一样,{li>

    异常可以被try-except块捕获。

    try:
        # Do something with the file
    except IOError:
        # Do something in case of error