2014-10-10 20 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