2010-06-29 16 views
28

मैं अपने प्रोजेक्ट में एक स्थिति है जहाँ मैं एक यूआरएल एक पैरामीटर वाले के लिए उपयोगकर्ता के पुनर्निर्देशन बनाने की जरूरत है के साथ एक यूआरएल को HttpResponseRedirect वापसी (ऐसा लगता है जैसे urls.py में घोषित किया जाता है:Django, एक पैरामीटर

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

कैसे मैं वापसी HttpResponseRedirect में उस पैरामीटर डाल सकते हैं मैंने कोशिश की तरह: वापसी HttpResponseRedirect ('/ कक्षा/notamember/classname'), वैसे भी, इस मूर्खता है, मुझे पता है, मैं के रूप में '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/') 

मैं उस यूआरएल में वेरिएबल 'क्लाक्लास' कैसे शामिल कर सकता हूं? बहुत बहुत धन्यवाद!

उत्तर

38

इस प्रयास करें:

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

संपादित करें:

यह निश्चित रूप से बेहतर (डैनियल Roseman के जवाब) है:

from django.core.urlresolvers import reverse 

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

हममम ... यह काम करने के लिए प्रतीत नहीं होता है - classname अभी भी यूआरएल में प्रकट नहीं होता :( – dana

+0

URL में क्या दिखाया जा रहा है – adamk

+0

http://127.0.0.1:8000/classroom?/notamember/ – dana

47

यह जटिल नहीं होना चाहिए। HttpResponseRedirect पर तर्क केवल एक स्ट्रिंग है, इसलिए स्ट्रिंग बनाने के लिए सामान्य नियम यहां लागू होते हैं। हालांकि, मुझे नहीं लगता कि आप वहां theclass वैरिएबल चाहते हैं, क्योंकि यह एक क्लासूम ऑब्जेक्ट है, स्ट्रिंग नहीं। आप संभवतः classname चाहते हैं। Adamk ने आपको सही जवाब दिया है।

हालांकि, यह कहकर कि आप केवल एक स्ट्रिंग का उपयोग कर सकते हैं, आपको वास्तव में क्या करना चाहिए reverse फ़ंक्शन का उपयोग करना है। ऐसा इसलिए है क्योंकि आप बाद में URL संरचना को बदलने का निर्णय ले सकते हैं, और यूआरएल स्ट्रिंग को हार्ड-कोड किए गए प्रत्येक स्थान को ढूंढने के बजाय अपने कोड को देखने के बजाय, आपको उन्हें एक ही स्थान पर परिभाषित करने पर भरोसा करना चाहिए: आपके यूआरएल। पीई फ़ाइल। तो अगर आप कुछ इस तरह करना चाहिए:

from django.core.urlresolvers import reverse 

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

दिलचस्प! मैं अब से यूआरएल के लिए रिवर्स फ़ंक्शन का उपयोग करूंगा। धन्यवाद! – dana

3

वास्तव में, शॉर्टकट redirect भी दृश्य नाम और मॉडल लेता है (जो get_absolute_url परिभाषित किया गया है) के नाम।

from django.shortcuts import redirect 

return redirect(leave_classroom) 
संबंधित मुद्दे