我有一个自定义模板标签:
def uploads_for_user(user):
uploads = Uploads.objects.filter(uploaded_by=user, problem_upload=False)
num_uploads = uploads.count()
return num_uploads
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情,所以我可以正确地复数:
{% with uploads_for_user leader as upload_count %}
{{ upload_count }} upload{{ upload_count|pluralize }}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
但是,uploads_for_user leader在此上下文中不起作用,因为'with'标记需要单个值 - Django返回:
TemplateSyntaxError at /upload/
u'with' expected format is 'value as name'
Run Code Online (Sandbox Code Playgroud)
知道如何绕过这个吗?
Dan*_*man 23
你可以把它变成一个过滤器:
{% with user|uploads_for as upload_count %}
Run Code Online (Sandbox Code Playgroud)
imi*_*ric 10
虽然过滤器仍然有效,但这个问题的当前答案是使用Django 1.4中引入的赋值标记.
所以解决方案与您原来的尝试非常相似:
{% uploads_for_user leader as upload_count %}
{{ upload_count }} upload{{ upload_count|pluralize }}
Run Code Online (Sandbox Code Playgroud)
更新:根据文档分配标签自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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19856 次 |
| 最近记录: |