Django - использовать тег шаблона и «с»? - PullRequest
19 голосов
/ 23 апреля 2010

У меня есть пользовательский тег шаблона:

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

и я бы хотел сделать что-то подобное, чтобы я мог правильно использовать множественное число:

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

Однако uploads_for_user leader не работает в этом контексте, потому что тег 'with' ожидает одно значение - Django возвращает:

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

Есть идеи, как мне это обойти?

Ответы [ 3 ]

23 голосов
/ 23 апреля 2010

Вы можете превратить его в фильтр:

{% with user|uploads_for as upload_count %}
10 голосов
/ 24 апреля 2014

Хотя фильтр все еще будет работать, текущий ответ на этот вопрос будет использовать теги присвоения , представленные в Django 1.4.

Таким образом, решение будет очень похоже на вашу первоначальную попытку:

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

Обновление : в соответствии с тегами назначения документы устарели, начиная с Django 1.9 (simple_tag теперь может сохранять результаты в переменной шаблона и должен использоваться вместо этого)

6 голосов
/ 28 февраля 2016

В Django 1,9 django.template.Library.assignment_tag () ограничен: simple_tag теперь может сохранять результаты в переменной шаблона и должен использоваться вместо него.

Итак, теперь простой тег мы можем использовать как:

Можно сохранить результаты тега в переменной шаблона чем непосредственно выводить его. Это делается с помощью аргумента as сопровождаемый именем переменной. Это позволит вам вывести довольствуйтесь тем, что считаете нужным:

{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
<p>The time is {{ the_time }}.</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...