我有一个自定义模板标记:
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'
知道如何绕过这个吗?
答案 0 :(得分:23)
你可以把它变成一个过滤器:
{% with user|uploads_for as upload_count %}
答案 1 :(得分:10)
虽然过滤器仍然可以使用,但这个问题的当前答案是使用Django 1.4中引入的assignment tags。
因此解决方案与您原来的尝试非常相似:
{% uploads_for_user leader as upload_count %}
{{ upload_count }} upload{{ upload_count|pluralize }}
更新:根据docs分配代码已弃用,因为Django 1.9(simple_tag现在可以将结果存储在模板变量中,应该替代使用)
答案 2 :(得分:6)
在Django 1.9中,django.template.Library.assignment_tag()被删除: simple_tag现在可以将结果存储在模板变量中,而应该使用它。
所以,现在simple tag我们可以使用如下:
可以将标记结果存储在模板变量中 而不是直接输出它。这是通过使用as参数完成的 后跟变量名称。这样做可以输出 满足自己的需要:
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
<p>The time is {{ the_time }}.</p>