2013-04-25 19 views
10

In meiner Django Vorlage muss ich den Wert einer Namens-URL einer Variablen innerhalb eines With Blocks zuweisen, damit ich sie an mehreren Stellen verwenden kann.Wert einer benannten URL einer Variablen in Django Templates zuweisen

brauche ich so etwas wie dies zu erreichen:

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

Aber offensichtlich ist, dass nicht funktionieren und würde mit einem Parsing-Fehler enden. Das obige Beispiel ist ein einfaches Szenario, in dem ich {% url showtag tag%} anstelle von {{tagabs}}} haben und den with-Block entfernen könnte. Aber in meinem Szenario den Tagabs-Wert muss ich es an mehreren Stellen und innerhalb einer if-Anweisung zum Vergleich verwenden.

Danke für die Hilfe.

+0

Könnten Sie geben etwas mehr Informationen über das größere Problem bitte? – rockingskier

Antwort

31

Warum ein neues Template-Tag/Filter erstellen, wenn das Feature im Kern ist?

Schauen Sie die Proben an: 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> 

und

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

Hervorragender Vorschlag, definitiv viel eleganter als ein neuer Tag. Vielen Dank! –

-4

Ich denke, Sie müssen entweder Ihre eigenen template tag erstellen, um dieses Problem zu verwalten, oder erstellen Sie die erforderlichen Daten in der Ansicht und übergeben Sie es in die Vorlage.

Je nachdem, was genau Sie versuchen, vielleicht including eine andere Vorlage und das Senden in Ihrer definierten Variable könnte es tun, aber ich bezweifle es.

Das Denken hinter Djangos Templating-System ist es so zu machen, dass es nicht sehr viel Logik in den Vorlagen gibt. Und damit ist es wieder möglich, entweder die Daten vorzubereiten, die Sie für die Ausgabe in der Ansicht benötigen, oder ein Template-Tag zu erstellen.

+0

Warum das Rad neu erfinden, wenn der URL-Tag den Job bereits erledigt ??? –

+0

Weil die Art, wie ich die Frage verstanden habe, nicht mit irgendeinem Kernverhalten übereinstimmt, das ich kenne. Die Art und Weise, wie es zu mir kam, war jemand, der versuchte, komplexe Operationen in der Ansicht auszuführen und nicht einfach nur eine URL zu benennen. – gaqzi

Verwandte Themen