2016-03-04 5 views
11

मुझे ऐसी समस्या का सामना करना पड़ता है जिसके लिए मुझे कोई समाधान नहीं मिल रहा है। मेरे पास navbar में एक बटन है जो सभी पृष्ठों पर उपलब्ध है और यह कुछ सामग्री बनाने के लिए जिम्मेदार एक बटन है।डाक अनुरोध के बाद Django में पिछले पृष्ठ पर रीडायरेक्ट कैसे करें

देखें कि बटन के साथ लिंक करता है:

def createadv(request): 
    uw = getuw(request.user.username) 
    if request.method =='POST': 
    form = AdverForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.instance.user = request.user 
     form.save() 
     return HttpResponseRedirect('/', {'username': request.user.username, 'uw': uw}) 
    args = {} 
    args.update(csrf(request)) 
    args['username'] = request.user.username 
    args['form'] = AdverForm() 
    args['uw'] = uw 
    return render_to_response('createadv.html', args) 

अब आप देख सकते मैं हमेशा सामग्री बनाने के बाद मुख्य पेज '/' को अनुप्रेषित लेकिन मैं जिसके साथ मैं के निर्माण का शुभारंभ किया पृष्ठ पर वापस जाने के लिए चाहते हैं सामग्री।

return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) 

ध्यान दें कि यह अगर ग्राहक (उदाहरण के लिए, एक निजी/गुप्त ब्राउज़र विंडो का उपयोग) संदर्भ देने वाली जानकारी भेजने अक्षम कर काम नहीं करेगा:

उत्तर

19

आप अपने फॉर्म में next फ़ील्ड जोड़ सकते हैं, और इसे request.path पर सेट कर सकते हैं। आपके फॉर्म को संसाधित करने के बाद आप इस पथ के मान पर रीडायरेक्ट कर सकते हैं।

template.html

<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.path }}"> 
    <button type="submit">Let's Go</button> 
</form> 

views.py

next = request.POST.get('next', '/') 
return HttpResponseRedirect(next) 

यह मोटे तौर पर अगर मैं अच्छी तरह से याद है क्या django.contrib.auth लॉगिन फार्म के लिए करता है।

some_page.html

<a href="{% url 'your_form_view' %}?next={{ request.path|urlencode }}">Go to my form!</a> 

template.html

<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.GET.next }}"> 
    <button type="submit">Let's Go</button> 
</form> 
3

आप HTTP_REFERER मान का उपयोग कर सकते हैं। ऐसे मामले में यह / पर रीडायरेक्ट करेगा।

+0

मैं अनुरोध जोड़ें:

आप एक मध्यवर्ती पृष्ठ के माध्यम से पारित, तो आप क्वेरी स्ट्रिंग के माध्यम से 'अगले' मूल्य पारित कर सकते हैं HMEPResponseRedirect में .META.get ('HTTP_REFERER', '/'), लेकिन दुर्भाग्यवश इससे मदद नहीं मिली। इस मामले में सबमिट करने के बाद मैं "createadv" पृष्ठ पर रहता हूं। – Oleg

+0

आपके बीच एक अतिरिक्त रीडायरेक्ट हो सकता है। सुनिश्चित करें कि आपके पास 'form action = "..." टैग में पीछे की ओर स्लैश है, उदाहरण के लिए' action = "/ createadv /" '। – Selcuk

+0

जब आप कोई फॉर्म पोस्ट करते हैं, तो आपका 'HTTP_REFERER' वह पृष्ठ होगा जहां से आपने फ़ॉर्म सबमिट किया है, जो वास्तव में इस मामले में एक ही पृष्ठ है। –

संबंधित मुद्दे