【问题标题】:Issue with checking for an image file in Django在 Django 中检查图像文件的问题
【发布时间】:2011-04-20 14:15:14
【问题描述】:

我来自 PHP 背景,但被分配了一个 Django 项目来管理,我把它带到了一个运行 Django 1.2.5 (Python2.6) 的新服务器上,并让它像在旧的。我现在的任务是修复旧开发人员的错误。到目前为止一切顺利,但我遇到了 ImageField 的绊脚石。本质上,用户可以上传图像徽标(这可行)。但是,当没有徽标的用户编辑他们的详细信息时,Django 会抛出错误:

ValueError: The 'org_logo' attribute has no file associated with it.

导致错误的代码sn-p是:

user = request.user
org = user.organisation
if not checkLogoFile(org):
    org.org_logo = ''
    org.save()

函数 checkLogoFile 如下所示:

def checkLogoFile(org):
from os.path import exists
path = org.org_logo.path
if path:
    file_name = path.split('/')[-1]
    return exists(settings.MEDIA_ROOT+'logo/'+file_name)
return False

按照我的理解,如果 checkLogoFile 返回 false 那么 org_logo 值将是一个零长度字符串。如果 org_logo 包含路径,则返回该路径。如前所述,当图像标志存在时,这会失败,但如果有图像标志则有效。 :-/

任何指针都会非常有帮助,因为我已经搜索了 Google,但到目前为止还没有得到任何结果。

【问题讨论】:

  • 在 checkLogoFile 中,尝试在设置路径之前检查是否 org.org_logo:。 checkLogoFile 代码只是检查文件是否在服务器上,而不是在表中,因此它仍在尝试使用 org.org_logo.path。
  • 成功了!谢谢你的提示。想想就很简单。我在想 org_logo 是作为空字符串从数据库中提取出来的,但基于此,它似乎没有被创建或等于 false?

标签: django image file


【解决方案1】:

解决问题:

def checkLogoFile(org):
   from os.path import exists
   path = org.org_logo.path if org.org_logo else None
   if path:
       file_name = path.split('/')[-1]
       return exists(settings.MEDIA_ROOT+'logo/'+file_name)
   return False

但无论如何,我真的不明白为什么要以这种方式进行检查。为什么不只是

def checkLogoFile(org):
   from os.path import exists
   path = org.org_logo.path if org.org_logo else None
   return path and exists(path)

【讨论】:

  • 很好,我是 Django 和 Python 的新手,并且继承了这段代码,所以随着时间的推移,我会尝试清理这些东西。谢谢你的例子。
  • 如果后端存储不是本地文件系统怎么办?是不是有办法询问FileField本身指向的内容是否存在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2013-10-09
  • 2011-12-08
  • 2017-08-09
相关资源
最近更新 更多