我来自PHP背景,但已经给了一个Django项目来管理,我把它带到一个运行Django 1.2.5 (Python2.6)的新服务器上,并让它像在旧服务器上一样运行。我现在的任务是修复旧开发人员的错误。到目前为止一切顺利,但我遇到了ImageField的绊脚石。基本上,用户可以上传图像徽标(这是有效的)。但是,当没有logo的用户编辑详细信息时,Django会抛出一个错误:
ValueError: The 'org_logo' attribute has no file associated with it.
导致错误的代码片段是:
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包含路径,则返回该路径。如前所述,当图像徽标不存在时,这将失败,但当一个存在时,它会工作。: -/
任何指示都将非常有帮助,因为我已经搜索了谷歌,到目前为止还没有找到任何地方。
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)