2010-07-07 49 views
-1

我有一個函數friend_exists這樣的:函數需要2個參數時,應只有一個

def friend_exists(request, pid): 
    result = False 
    try: 
     user = Friend.objects.get(pid=pid) 
    except Friend.DoesNotExist: 
     pass 
    if user: 
     result = True 

    return result 

我打電話它從我的其他功能像這樣:

exists = friend_exists(form.cleaned_data['pid']) 

其中pid = u'12345678'。爲什麼我得到:

Exception Type: TypeError at /user/register/ 
Exception Value: friend_exists() takes exactly 2 arguments (1 given) 

任何想法?

+0

請修復帖子標題錯字funciotn。 – sivabudh 2010-07-07 21:57:32

回答

5

爲什麼你認爲它應該只有一個?你已經清楚地得到了在函數定義兩個參數:

def friend_exists(request, pid): 

就在那兒,它說,它預計requestpid

+0

如果這是'friend_exists'函數的實際來源,它看起來不需要'request'參數。也許這一個論點是重構之後的某種意外延期(或者其他)? – 2010-07-07 22:34:52

+0

我只是認爲請求是自動填充的 – muntu 2010-07-07 23:20:06

2

它需要兩個參數,你只給它一個,form.cleaned_data ['pid']的值。如果該值實際上是兩個參數的元組/列表,你想與像星號展開:

exists = friend_exists(*form.cleaned_data['pid']) 

在這種情況下,一個更簡潔的方法可能然後是:

request, pid = form.cleaned_data['pid'] 
exists = friend_exists(request, pid) 
1

這看起來像django,所以正確調用你的函數的方式是friend_exists(request, form.cleaned_data['pid']。當一個視圖函數被調用時,請求會自動填充,所以它看起來應該發生在每個django應用程序的調用中,但是當您手動調用該函數時,您必須手動將它傳遞給request對象。

相關問題