2010-04-23 10 views
17

Ich habe einen eigenen Template tag:Django - Schablonen-Tag und 'mit' verwenden?

def uploads_for_user(user): 
    uploads = Uploads.objects.filter(uploaded_by=user, problem_upload=False) 
    num_uploads = uploads.count() 
    return num_uploads 

und ich möchte so etwas tun, kann ich richtig so pluralize:

{% with uploads_for_user leader as upload_count %} 
    {{ upload_count }} upload{{ upload_count|pluralize }} 
{% endwith %} 

jedoch uploads_for_user leader funktioniert nicht in diesem Zusammenhang , weil der ‚mit‘ Tag einen einzigen Wert erwartet - Django zurück:

TemplateSyntaxError at /upload/ 
u'with' expected format is 'value as name' 

Jede Idee, wie kann ich diese Runde bekommen?

Antwort

22

Man könnte es in einen Filter drehen:

{% with user|uploads_for as upload_count %} 
+0

Ah - ich sehe. Danke :) – AP257

+3

Django 1.5+ können Sie dies prägnanter tun. {% mit upload_count = Benutzer | uploads_for%} [django mit] (https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#with) –

9

Während ein Filter noch funktionieren würde, würde die aktuelle Antwort auf diese Frage assignment tags, in Django 1.4 eingeführt zu bedienen.

zu Ihrem ursprünglichen Versuch So wäre die Lösung sehr ähnlich sein:

{% uploads_for_user leader as upload_count %} 
{{ upload_count }} upload{{ upload_count|pluralize }} 

aktualisieren: Richtet sich nach den docs Zuordnung Tags da Django sind veraltet 1.9 (simple_tag jetzt Ergebnisse in einer Template-Variable speichern kann und sollte stattdessen verwendet werden)

+2

Dies sollte als die neue beste markiert werden Antworten. – imarban

+1

Zuordnung Tags seit 1.9 veraltet - bearbeitet die Antwort – Anupam

5

In Django 1.9 django.template.Library.assignment_tag() ist entzogen: simple_tag kann jetzt Ergebnisse in einer Vorlage-Variable speichern und sollte stattdessen verwendet werden.

So, jetzt simple tag können wir wie ein verwenden:

Es ist möglich, die Tag-Ergebnisse in einem Template-Variable speichern eher als es direkt ausgibt. Dies geschieht durch Verwendung des as-Arguments gefolgt von dem Variablennamen. Dadurch können Sie die Ausgabe der Inhalt selbst, wo Sie sehen, passen:

{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %} 
<p>The time is {{ the_time }}.</p> 
Verwandte Themen