2013-04-25 13 views
10

Nel mio modello Django ho bisogno di assegnare il valore di un url di nomi in una variabile all'interno di un blocco con in modo da poterlo utilizzare in più punti.Assegna il valore dell'URL con nome a una variabile nei modelli Django

Ho bisogno di realizzare qualcosa di simile:

{% for tag in post.tags.all %} 
    {% with tagabs={%url showtag tag%} %} 
      <li><a href="{{tagabs}}">#{{tag}}</a></li> 
    {% endwith %} 
{% endfor %} 

Ma ovviamente questo non funziona e finirebbe con un errore di analisi. L'esempio precedente è uno scenario semplice in cui potrei avere {% url showtag tag%} invece di {{tagabs}} e rimuovere il blocco with. Ma nel mio scenario il valore di tagabs ho bisogno di usarlo in diversi punti e all'interno di una dichiarazione if per il confronto.

Grazie per l'aiuto.

+0

Potrebbe dare un po 'più informazioni sul problema più grande per favore? – rockingskier

risposta

31

Perché creare un nuovo tag/filtro modello se la funzione è nel core?

Guarda i campioni a: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

{% url 'path.to.view' arg arg2 as the_url %} 

<a href="{{ the_url }}">I'm linking to {{ the_url }}</a> 

e

{% url 'path.to.view' as the_url %} 
{% if the_url %} 
    <a href="{{ the_url }}">Link to optional stuff</a> 
{% endif %} 
+0

Eccellente suggerimento, decisamente molto più elegante di un nuovo tag. Grazie! –

-4

Penso che dovrai creare il tuo template tag per gestire questo problema o creare i dati necessari nella vista e passarlo al modello.

In base a esattamente ciò che si sta tentando di fare, forse including un altro modello e l'invio della variabile definita potrebbe farlo, ma ne dubito.

Il pensiero dietro il sistema di template di Djangos è di far sì che non ci sia molta logica nei template. In questo modo si torna a preparare i dati necessari per l'output nella vista o creare un tag modello.

+0

Perché reinventare la ruota quando il tag dell'URL fa già il lavoro ??? –

+0

Perché il modo in cui ho capito la domanda non corrispondeva a nessun comportamento di base che io conosca. Il modo in cui mi è venuto fuori è stato qualcuno che cercava di rendere complesse le operazioni nella vista e non semplicemente nominare un URL. – gaqzi

Problemi correlati