11

पर रीडायरेक्ट करें मेरे पास पेज एक्स और पेज वाई पर एक बटन है जो पृष्ठ z पर रीडायरेक्ट करता है। पृष्ठ जेड पर, मेरे पास एक ऐसा फॉर्म है जिसे भरने की आवश्यकता है। सहेजने पर, मैं पृष्ठ x या y पर रीडायरेक्ट करना चाहता हूं (जो भी मैं शुरुआत में था)।डीजेगो पिछली बार

आम तौर पर, आप दृश्य में "रीडायरेक्ट" का उपयोग करते हैं, और वह पृष्ठ निर्दिष्ट करते हैं जिसे आप रीडायरेक्ट करना चाहते हैं। लेकिन इस तरह के मामले में आप क्या करेंगे?

कोई विचार?

धन्यवाद!

उत्तर

10

आप पेज जेड पर आने वाले पेज से ट्रैक करने के लिए जीईटी पैरामीटर का उपयोग कर सकते हैं। तो जब आप पेज जेड पर आम तौर पर पहुंच रहे हैं तो हमें याद है कि हम किस पेज से आए थे। जब आप पृष्ठ z पर प्रपत्र को संसाधित कर रहे हैं, तो हम उस पूर्व सहेजी गई जानकारी का उपयोग रीडायरेक्ट करने के लिए करते हैं। तो:

बटन/पेज y पर लिंक एक पैरामीटर जिसका मान वर्तमान URL यह शामिल करना चाहिए:

<a href="/page_z/?from={{ request.path|urlencode }}" />go to form</a> 

फिर page_z के ध्यान में रखते हुए आप इस टेम्पलेट पर पारित कर सकते हैं:

def page_z_view(self, request): 
    ... 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None) }) 

और आपके फॉर्म टेम्पलेट में:

<form action="{% if from %}?next={{ from }}{% endif %}" /> 
... 

तो अब फॉर्म - सबमिट होने पर -पर होगापैरामीटर जो इंगित करता है कि फॉर्म सफलतापूर्वक सबमिट होने के बाद कहां लौटना है।

def page_z_view(self, request): 
    ... 
    if request.method == 'POST': 
     # Do all the form stuff 
     next = request.GET.get('next', None) 
     if next: 
      return redirect(next) 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None)} 
+0

तो पेज y पर मेरे बटन कुछ इस तरह होना चाहिए? किसी कारण से काम नहीं कर रहा है। एक के लिए, मेरा फॉर्म अब सहेजता नहीं है, भले ही "अगला" मेरे फॉर्म के तहत मान्य है .. और मुझे मूल स्वागत पृष्ठ पर रीडायरेक्ट किया जा रहा है .. हालांकि यह गलत पृष्ठ है जिसके साथ शुरू करना है .. मैं यह भी कहां नहीं जानता उसे लॉल से मिला .. – JohnnyCash

+1

मैंने जवाब अपडेट किया है - मैंने '

+0

सबमिट करते समय दूसरा धन्यवाद :) केवल एक त्वरित सुधार: आपके JohnnyCash

-2

आपके उपयोगकर्ता द्वारा देखे जा रहे पृष्ठों के बारे में जानकारी स्टोर करें, ताकि आप इसे बाद में पुनर्प्राप्त कर सकें। शायद ऐसा करने के लिए सबसे अच्छी जगह सत्र में है।

2

Django अनुरोध जानता है क्या पेज उपयोगकर्ता से आया है:: हम दृश्य revist को यह करने की आवश्यकता

previous_page = request.META['HTTP_REFERER'] 

यह की तरह कुछ में शामिल होंगे:

>>> print(previous_page) 
'http://www.myserver.com/myApp/z' 

इसलिए आप जानते हैं कि आप कहां से आए थे (चेतावनी, इसे असुरक्षित डेटा के रूप में समझें और इसे पूरी तरह से सत्यापित करें, इसमें दुर्भावनापूर्ण डेटा भी हो सकता है) और जानकारी का उपयोग करें।

सबसे पहले आप के रूप में

data = { 
    ..., 
    # also indicate, that saved data are valid and user can leave 
    'previous_page': previous_page, 
} 

z.html

return render(request, 'myApp/z.html', data) 

और पेज जेड के खाके में, आप के लिए मेटा-ताज़ा टैग को जोड़ने के पेज रेंडर यह टेम्पलेट गुजरती हैं। यह कारण होगा कि एक बार प्रपत्र सहेजा जाता है और पृष्ठ लोड किया, उपयोगकर्ता वापस अपने आप पुनर्निर्देशित पुनः निर्देशित किया जाएगा:

{% if form_is_saved and previous_page %}<meta http-equiv="refresh" content="0; url={{ previous_page }}" />{% endif %} 

यह लाभ दिया है, उस रूप पेज z.html से सहेजा जाता है, जहां यह भर जाता है और आप पृष्ठों x और y द्वारा इसे संभालने की आवश्यकता नहीं है (यदि पृष्ठ x और y आपके Django ऐप के बाहर हैं तो यह करने का यही एकमात्र तरीका है)। :

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