2014-10-10 22 views
-2

我想选择一个或另一个,但我不能使用if语句,因为即使我只是尝试它发生错误。没有如果调整 - Django python

我怎样组织代码,以便如果可能的话,我这样做:

i = Image(entry = e,\ 
     image = request.FILES['file'],)) 
i.save() 

,如果这是不可能的,我应该这样做,而不是:

i = Image(entry = e,\ 
     url = request.POST['website']) 
i.save() 

民生之本我实际上检查是否我可以调用request.FILES,因为我的图像不是只是一个URL或本地文件本身,但我不能在if语句中尝试它。

谢谢

+0

顺便说一句:没有这里需要连续的反斜杠。 – dom0 2014-10-10 17:16:56

+1

在请求替代方案之前,您应该显示您尝试的if语句,并歪曲错误。 – 2014-10-10 17:40:21

回答

2

简单的解决方案:

kw = {'entry': e} 
if 'file' in request.FILES: 
    kw['image'] = request.FILES['file'] 
elif 'url' in request.POST: 
    kw['url'] = request.POST['website'] 
else: 
    raise SomeException() 
i = Image(**kw) 
i.save() 

,但你会得到更好的使用FormModelForm与自定义验证...

-1
try: 
    i = Image(entry = e,\ 
     image = request.FILES['file'],)) 
    i.save() 

except: 
    i = Image(entry = e,\ 
     url = request.POST['website']) 
    i.save() 
+1

不要只用一个空的'except',只要抓住你要找的就可以了。 – 2014-10-10 17:27:12

+0

瑞恩是正确的,我的意思是说,但我不知道你收到了什么类型的错误。 – 2014-10-10 17:28:54

+1

@Alecg_O:很容易找出......两者都是'MultiValueDict'的实例(好吧,'request.POST'实际上是一个'QueryDict',它是'MultiValueDict'的一个子类,这会引发' MultiValueDictKeyError',它实际上是内建的'KeyError'的子类。TL; DR:你得到一个'KeyError' ... – 2014-10-13 11:57:07