Desidero evidenziare la pagina corrente nel menu di navigazione. Ovviamente ho bisogno di dare ai collegamenti del menu una classe come "attiva" quando sei sulla loro pagina. Questo è un problema classico e ho visto molte soluzioni proposed. Il mio problema è che odio tutti loro e ritengo che nessuno di loro sia molto ASCIUTTO. Per esempio:Perché mai devo passare a RequestContext in tutte le mie risposte?
@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>
Il tag prende la vostra richiesta corrente e un'espressione URL e restituisce 'attivo', se siete attualmente in questa pagina. In alternativa, questo può essere fatto con viste nominate piuttosto che url ma il principio è lo stesso.
Il mio problema principale di questo è che la mia navigazione sarà chiamato sul 99% delle mie opinioni e tuttavia, al fine di ottenere la variabile richiesta corrente Ho ancora analizzare una RequestContext al modello con qualcosa di simile:
def contact(request):
# snip ...
return render_to_response(
'contact.html',
{ 'myvar' : myvar },
context_instance=RequestContext(request))
Perché devo aggiungere questa linea di istanza di contesto a ciascuna delle mie visualizzazioni quando probabilmente uno solo di essi ha bisogno della variabile di richiesta per ottenere l'URL/vista corrente per evidenziare il collegamento attivo? Questo sembra terribilmente umido, specialmente per una funzionalità che deve essere nella grande maggioranza dei siti di Django. Voglio che la richiesta sia inclusa di default ed essere in grado di sopprimerla opzionalmente. Non riesco a trovare un modo per farlo nel middleware poiché non riesco a intercettare il modello prima del suo rendering dopo che la vista lo ha restituito.
Qualche suggerimento?
Il decoratore @render_to è geniale! Grazie! – Jimmy
+1 per aver raccomandato @render_to! nota che [django-fastidioso] (https://github.com/skorokithakis/django-annoying) è stato preso in carico e spostato a causa dell'inattività – antiplex
4 anni dopo e Django 1.5 ha rimosso il 'direct_to_template'. Quale sarebbe ora il modo consigliato per farlo, senza usare django-fastidioso – Patrick