2010-06-29 47 views
28

我已經在我的項目的情況下,我需要讓用戶重定向到包含參數的URL,(它是在像urls.py聲明:Django的返回HttpResponseRedirect一個網址參數

url(r'^notamember/(?P<classname>\w+)/$', 
          notamember, 
          name='notamember'),) 

我怎樣才能把這個參數在返回HttpResponseRedirect我想這樣的: 返回HttpResponseRedirect(「/教室/ notamember /類名」),無論如何,這是愚蠢的,我知道,我可以不考慮「classmane」作爲一個參數 爲了清晰起見,我的觀點是:

def leave_classroom(request,classname): 
theclass = Classroom.objects.get(classname = classname) 
u = Membership.objects.filter(classroom=theclass).get(member = request.user).delete() 
return HttpResponseRedirect('/classroom/notamember/theclass/') 

如何在該網址中包含變量'theclass'? 非常感謝!

回答

38

試試這個:

return HttpResponseRedirect('/classroom/notamember/%s/' % classname) 

編輯:

這無疑是更好的(丹尼爾·羅斯曼的答案):

from django.core.urlresolvers import reverse 

url = reverse('notamember', kwargs={'classname': classname}) 
return HttpResponseRedirect(url) 
+0

嗯...這似乎並沒有工作 - 類名仍然沒有出現在URL :( – dana 2010-06-29 11:11:32

+0

是什麼出現在URL – adamk 2010-06-29 11:15:56

+0

http://127.0.0.1:8000/classroom?/notamember/ – dana 2010-06-29 11:16:33

47

這不應該是複雜的。 HttpResponseRedirect的參數只是一個字符串,所以建立字符串的常規規則適用於此。但是,我不認爲你需要theclass變量,因爲這是一個ClassRoom對象,而不是一個字符串。你大概想要classname。 adamk在這裏給了你正確的答案。

但是,話雖如此,您可以使用一個字符串,但實際上應該使用reverse函數。這是因爲您稍後可能決定更改網址結構,而不必仔細查看代碼,找到每個地方都對網址字符串進行了硬編碼,您應該依靠將它們定義在一個地方:您的網址。 py文件。所以,你應該做這樣的事情:

from django.core.urlresolvers import reverse 

url = reverse('notamember', kwargs={'classname': classname}) 
return HttpResponseRedirect(url) 
+0

有趣!我將從現在開始使用URL的反向函數。謝謝! – dana 2010-06-29 12:09:37

3

其實,快捷redirect需要視圖名稱和型號(已get_absolute_url定義)的名字了。

from django.shortcuts import redirect 

return redirect(leave_classroom)