Ответ 1
Вы можете превратить его в фильтр:
{% with user|uploads_for as upload_count %}
У меня есть собственный тег шаблона:
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'
Любая идея, как я могу обойти это?
Вы можете превратить его в фильтр:
{% with user|uploads_for as upload_count %}
Пока фильтр все равно будет работать, текущим ответом на этот вопрос будет использование тегов назначения, введенных в Django 1.4.
Таким образом, решение будет очень похоже на вашу первоначальную попытку:
{% uploads_for_user leader as upload_count %}
{{ upload_count }} upload{{ upload_count|pluralize }}
Обновление. В соответствии с тегами назначения docs устарели, так как Django 1.9 (теперь может быть просто simple_tag приводит к переменной шаблона и следует использовать вместо этого)
В 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>