在模板中捕获WindowsError

时间:2016-10-11 17:55:26

标签: python django

我在Windows机器上编码,但我在Linux上运行我的生产网站。

当尝试使用从生产系统复制的数据库访问我的开发计算机上的页面时,如果这些文件不在本地存在,则在尝试列出文件时会出现错误。 这是预期的,因为我只是复制了数据库而不是文件。我不想要/不需要这些文件,但我也不想要跟踪错误:

  

Windows / at / 126 / documents / [错误3]系统无法找到   路径指定:   U' C:\ mysite的\媒体\文件\ 2016 \ 07 \ 26 \ myfile.docx'

我不想抛出错误,而是希望在我的模板中处理这个错误,例如:

{% if doc.data %}{{ doc.data.size | filesizeformat }}{% else %}File not found{% endif %}

然而,这不起作用。 doc.data 确实存在,因为数据库知道此文件位置的值。但该文件在磁盘上不可用。

任何方法都能正确捕捉到这一点,最好是在模板中?

我的模特:

class Document(models.Model):
    data = models.FileField(upload_to="documents/%Y/%m/%d")

1 个答案:

答案 0 :(得分:0)

不是最佳答案,但可以在views.py(不在模板中)中实现以下解决方法:

documents = Document.objects.all()

if documents:
    exclude_list = []
    for doc in documents:
        try:
            local_file = doc.data.file
        except IOError:
            exclude_list.append(doc.id)
    documents = documents.exclude(id__in=exclude_list)

context_dict['documents'] = documents

这样,如果找不到有效的本地文件,文档就不会显示在模板中。