मैं नेविगेशन मेनू में वर्तमान पृष्ठ को हाइलाइट करना चाहता हूं। स्पष्ट रूप से मुझे मेन्यू को अपने पृष्ठ पर होने पर 'सक्रिय' जैसी कक्षा को लिंक करने की आवश्यकता है। यह एक क्लासिक समस्या है और मैंने कई समाधान proposed देखा है। मेरी समस्या यह है कि मैं उन सभी से नफरत करता हूं और उनमें से कोई भी बहुत शुष्क होने पर विचार नहीं करता हूं। उदाहरण के लिए:पृथ्वी पर क्यों मुझे अपने सभी प्रतिक्रियाओं में RequestContext पास करना है?
@register.simple_tag
def active(request, pattern):
import re
if re.search(pattern, request.path):
return 'active'
return ''
----
{% load tags %}
<div id="navigation">
<a class="{% active request "^/about/" %}" href="/about/">About</a>
<a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
<a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>
टैग को अपने वर्तमान अनुरोध और एक यूआरएल अभिव्यक्ति और रिटर्न 'सक्रिय' अगर आप इस पेज पर वर्तमान में कर रहे हैं लगता है। वैकल्पिक रूप से यह यूआरएल के बजाए नामित विचारों के साथ किया जा सकता है लेकिन सिद्धांत समान है।
:इस के साथ मेरा मुख्य मुद्दा यह है कि मेरे नेविगेशन अपने विचार के 99% और पर बुलाया जाएगा अभी तक, आदेश वर्तमान अनुरोध चर मैं अभी भी कुछ इस तरह के साथ टेम्पलेट के लिए एक RequestContext पार्स है प्राप्त करने के लिए है
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
मुझे अपने विचारों में से हर एक जब शायद करने के लिए इस context_instance लाइन जोड़ने की जरूरत है सभी उनमें से एक आदेश वर्तमान यूआरएल/दृश्य सक्रिय लिंक को उजागर करने के प्राप्त करने के लिए अनुरोध चर की जरूरत है, लेकिन? यह बहुत गीला लगता है, खासतौर पर ऐसी सुविधा के लिए जो डीजेंगो साइटों के विशाल बहुमत में होना चाहिए। मैं डिफ़ॉल्ट रूप से अनुरोध को शामिल करना चाहता हूं और इसे वैकल्पिक रूप से दबाने में सक्षम हूं। मुझे मिडलवेयर में ऐसा करने का कोई तरीका नहीं मिल रहा है क्योंकि दृश्य को वापस करने के बाद इसे प्रस्तुत करने से पहले टेम्पलेट को अवरुद्ध नहीं कर सकता।
कोई सुझाव?
@render_to सजावट शानदार है! धन्यवाद! @render_to की सिफारिश के लिए – Jimmy
+1! ध्यान दें कि [django-annoying] (https://github.com/skorokithakis/django-annoying) को 4 साल बाद निष्क्रियता – antiplex
और Django 1 के कारण ले जाया गया है।5 ने 'direct_to_template' को हटा दिया है। Django-annoying का उपयोग किए बिना, ऐसा करने के लिए अब अनुशंसित तरीका क्या होगा – Patrick