2013-12-16 5 views
5

Io sto cercando di fare i seguenti lavori modello frammento:modelli di Django: come espandere una variabile in l'argomento stringa per il tag incorporato `url`

<ul> 
    {% for name,label in entries.items %} 
    <li><a href="{% url name %}">{{ label }}</a></li> 
    {% endfor %} 
</ul> 

Come si può vedere name è una variabile che ho bisogno di espandere in stringa prima di passarlo al tag integrato url.

Purtroppo i suddetti risultati del modello frammento nel seguente eccezione:

Exception Type: TemplateSyntaxError 
Exception Value:  
Caught NoReverseMatch while rendering: Reverse for 'name' with arguments '()' and keyword arguments '{}' not found. 

Tutte le idee o metodi alternativi su come raggiungere questo obiettivo?

risposta

2

Il codice dovrebbe funzionare per Django> = 1.4 (IIRC) - assumendo name risolve in un nome url valido e questo url non ha bisogno di argomenti o kwargs. Per Django 1.3x devi aggiungere {% load url from future %} al tuo modello affinché funzioni. Per django < 1.3 sei sfortunato (beh, dovrai scrivere un tag personalizzato) - ma dovresti prendere in considerazione il porting del tuo codice comunque.

+0

Questa è la risposta che stavo cercando. Funziona! Grazie! :) (sto usando django 1.3.7) – fstab

3

È possibile passare la variabile a {% url %} templatetag. Se name è un nome urlpattern valido, questo snippet dovrebbe funzionare.

Se avete bisogno di convertire name a un nome URLPATTERN valida, è possibile farlo utilizzando filtro personalizzato, in questo modo:

{% url name|my_filter %} 
+0

Grazie per la risposta. Sembra essere un po 'ridondante la creazione di un filtro personalizzato che chiama semplicemente la funzione del resolver url django; questo è il motivo per cui speravo in una soluzione all'interno del modello. – fstab

+0

a proposito, 'nome' contiene già un nome urlpattern valido. – fstab

+1

@niekas: la sintassi di esempio che hai pubblicato è per i filtri, non per i tag. –