python - Django में HttpResponseRedirect का उपयोग करते समय मैं टेम्पलेट संदर्भ जानकारी कैसे पास करूं?




(5)

मेरे पास एक ऐसा फॉर्म है जो उपयोगकर्ता द्वारा जानकारी दर्ज करने के बाद उसी पृष्ठ पर रीडायरेक्ट करता है (ताकि वे जानकारी दर्ज करना जारी रख सकें)। अगर फॉर्म सबमिशन सफल है, तो मैं वापस आ रहा हूं

HttpResponseRedirect(request.path)

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

तो HttpResponseRedirect का उपयोग करते समय मैं टेम्पलेट संदर्भ जानकारी कैसे पास कर सकता हूं?

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


आप क्वेरी स्ट्रिंग में सहेजे गए = 1 को जोड़ते हैं और इसके साथ कुछ जांचते हैं:

saved = request.GET.get('saved', False)

आप नहीं कर सकते HttpResponseRedirect ब्राउज़र पर क्लाइंट-साइड रीडायरेक्ट (HTTP स्थिति कोड 302) भेजता है, और फिर ब्राउज़र दूसरे पृष्ठ को दोबारा अनुरोध करता है।

आप रीडायरेक्ट पर एक यूआरएल क्वेरी स्ट्रिंग सेट कर सकते हैं, हालांकि यह उपयोगकर्ता के लिए दृश्यमान होगा और HTTP अनुरोधों (यानी प्रॉक्सी) को अवरुद्ध करने वाला कोई भी व्यक्ति होगा, और इसलिए संवेदनशील जानकारी के लिए उपयुक्त नहीं है।


पूरा होने और भविष्य के संदर्भ के लिए, अब आप संदेश ढांचे का उपयोग कर सकते हैं। इसे स्थापित करने के बाद:

views.py

from django.contrib import messages

def view(request):
  # your code
  messages.success(request, "Your data has been saved!")
  HttpResponseRedirect(request.path)

template.html

{% if messages %}
<ul class="messages">
  {% for message in messages %}
  <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
  {% endfor %}
</ul>
{% endif %}

यदि आप ऑथ का उपयोग कर रहे हैं और उपयोगकर्ता में लॉग इन किया है तो आप यह कर सकते हैं:

http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.message_set.create

पैरा प्राप्त करें भी हैकबल हैं। जैसा कि अन्य उत्तरों में उल्लिखित क्वेरीस्ट्रिंग का उपयोग किया जा सकता है।

मुझे लगता है कि सत्र ढांचे का उपयोग करना सबसे पसंदीदा तरीका होगा। इस तरह आप संदर्भ में जो कुछ भी चाहते हैं उसे लोड कर सकते हैं और प्राप्त कर सकते हैं

{{ request.session.foo }} 

foo संदेश हो सकता है या आप कर सकते हैं:

{% ifequal request.session.foo 1 %} Nice work! {% else %} Almost! {% endifequal %}

और अन्य मजेदार सामान।

http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views


सबसे अच्छा तरीका शायद रीडायरेक्ट यूआरएल पर कोडित क्वेरीस्ट्रिंग का उपयोग करना होगा ... यह एक पुराना स्कूल दृष्टिकोण है।

आप कुछ ऐसा कर सकते हैं

/ पेज /? एम = 1, / पेज /? एम = 2, आदि

फिर आप उस चर को अनुरोध के साथ पार्स करेंगे। दृश्य कोड में जीईटी और उचित संदेश दिखाएं।





redirect