2010-06-16 15 views
17

Cosa mi piacerebbe fare (per un recente widget 'changes' - non un widget di Django in questo caso) è passare un urlname nel mio modello come variabile, quindi usarlo così: {% url sitechangeobject.urlname %} Dove urlname è una stringa contenente un nome valido per un url.Passare urlname variabile al tag url nel template django

È possibile? Il modello continua a rompersi dicendo che non può trovare sitechangeobject.urlname come un nome (che è giusto, non esiste). C'è un modo per farlo apparire all'interno di quella variabile?

Se ci sono altri modi per risolvere questo problema, ho pensato di controllare.

Grazie!

risposta

27

partire dal Django 1.3 del {% url %} tag supporta correttamente:

{% url view_name_variable %} 
{% url 'view_name_string' %} 

... questo diventa il comportamento predefinito in Django 1.5.

In precedenza, era solo l'opzione per fare questo:

{% url view_name_string %} 

Per ottenere il tag a lavorare in questo modo in Django 1.3 e 1.4 progetti, è necessario la seguente riga alla parte superiore di ogni modello lo si utilizza in:

{% load url from future %} 

Secondo il Django 1.3 release notes:

... in Django 1.5, il vecchio comportamento sarà sostituito con il nuovo comportamento. Per garantire la compatibilità con le versioni future di Django, i modelli esistenti dovrebbero essere modificati per utilizzare le nuove librerie e sintassi future.

Nota che il supporto per {% load url from future %} è stato rimosso in Django 1.9.

+0

Come sarebbe una variabile essere concatenato ad una stringa suffisso per formare l'url? Qualcosa come '{% url variable-'suffix '%}', che ovviamente non funziona. – Romildo

+1

Sembra un po 'strano per me, ma penso che potresti usare il filtro '| add'. es .: '{% url variable | add: '- suffisso'%}' Vedi [aggiungi documenti filtro] (https://docs.djangoproject.com/en/1.4/ref/templates/builtins/?from=olddocs# Inserisci). – meshy

8

Nota: questa risposta è rilevante solo per le versioni di django precedenti alla 1.3. Se si utilizza django 1.3 o successivo, la funzionalità richiesta è integrata - si prega di vedere meshy's answer.

Il tag integrato url non può farlo. Tuttavia, django-reversetag fa esattamente questo (e altro).

Secondo il readme, il tag reverse prevista da questo codice prevede:

  • sintassi coerente ("stringhe" e variabili)
  • capacità di invertire Vedi nomi memorizzati nelle variabili di contesto
  • parziali invertendo
1

se si utilizza Django 1.5 e versioni successive, django-reversetags non è più necessario per il solo passaggio di nomi di visualizzazione come variabili in modelli, da utilizzare all'interno del tag url.

Sono stato confuso con la disponibilità di django-reversetags, ho appena pensato di aggiornare correttamente la questione qui.

+0

Non richiesto in 1.3 e versioni successive. Basta usare '{% caricare url dal futuro%}' – meshy

2

per django 1.5 può essere questo è utile

solito, di accedere a una variabile passata alla vista usiamo {{variabile}}

tuttavia, per l'URL nel modello, il seguente non funziona: {% url 'app: namespace' {{varible}}%}

sufficiente utilizzare il seguente va bene: {% url 'app: namespace' varible%}

Problemi correlati