एक और तरीका है। page_not_found
पर कोड RequestContext
का उपयोग करता है; इसका अर्थ है कि settings.py
में TEMPLATE_CONTEXT_PROCESSORS
प्रविष्टि में परिभाषित सभी संदर्भ प्रोसेसर द्वारा परिभाषित सभी चरों तक पहुंच है। डिफ़ॉल्ट मान में, दूसरों के बीच, django संदेश ढांचे शामिल हैं।
तो, आप संदेश को परिभाषित करना चाहते हैं जिसे आप messages.error
का उपयोग करके दिखाना चाहते हैं, उदाहरण के लिए, और messages
चर का उपयोग करके टेम्पलेट में संदेश दिखाएं।
दूसरे शब्दों में, अगर आप इस तरह आपके विचार लिख सकते हैं:
from django.contrib import messages
from django.http import Http404
from django.template import RequestContext
def my_view(request):
# your code goes here
if something_horribly_wrong_happened():
messages.error(request, 'Somethig horribly wrong happened!')
raise Http404("It doesn't mind whatever you put here")
else:
return render_to_response(
'template.html',
RequestContext(request, locals()),
)
अपने 404.html टेम्पलेट में, आप की तरह कुछ लिखना चाहिए:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
यह एक थोड़ा और अधिक जटिल है, लेकिन इसका लाभ यह है कि आप कई संदेश भेज सकते हैं, और यहां तक कि अलग-अलग प्रकार के संदेशों का उपयोग भी कर सकते हैं (चेतावनी, डीबग, जानकारी, त्रुटि इत्यादि ...) आप यहां django संदेश ढांचे के बारे में अधिक पढ़ सकते हैं: The messages framework | Django Documentation।
आप कस्टम में हो रही संदेश "यह एक त्रुटि है" का रास्ता खोजने के लिए है 404 हैंडलर? @Alasdair, nbv4 मैं वास्तव में आपकी मदद को बढ़ा दूंगा। – marianobianchi
@ marianobianchi मैंने गलती से कहा कि इसे स्वीकार करने के लिए एक कस्टम 404 हैंडलर का उपयोग करना संभव होगा, लेकिन यह वास्तव में संभव नहीं है। एक आवश्यक परिवर्तन के लिए एक [पुल अनुरोध] (https://github.com/django/django/pull/1397) था, लेकिन इसे बंद कर दिया गया था। इसके बारे में सोचने के बाद, मैं निर्णय से सहमत हूं। मुझे लगता है कि यूरिबेट्स के सुझावों के अनुसार संदेश ढांचे का उपयोग करना बेहतर है, या कस्टम टेम्पलेट प्रस्तुत करना और स्थिति 404 लौटाएं। यदि आप डिफ़ॉल्ट 404 टेम्पलेट में अपवाद संदेश शामिल करते हैं, तो जोखिम है कि आप अपने अंतिम उपयोगकर्ताओं को अनुपयुक्त त्रुटि संदेश दिखाते हैं। – Alasdair