使用返回查询的参数遍历自定义标记

时间:2018-06-07 10:04:10

标签: django django-templates

我的自定义标记是:

register = template.Library()
@register.simple_tag
def last_three_messages(request):
    u=User.objects.get(username=request.user)
    last_three_messages=Message.objects.filter(to_user=u, opened=False)[:3]
    return last_three_messages

如何在模板中循环显示? 我试过了:

{% for message in last_three_messages request %}
    do something
{% endfor %}

这返回了一个错误:

  

'对于'语句应使用格式' for x in y':for message in   last_three_messages请求

如何循环查询集并将请求作为参数传递?

1 个答案:

答案 0 :(得分:2)

你还没有打电话给标签;只是引用for标签内的名称就不会调用它。

您需要先调用它并将其结果分配给变量:

{% last_three_messages request as my_messages %}
{% for message in my_messages %}

但更好的方法是将其写为过滤器:

@register.filter
def last_three_messages(request):
    ...

并将其命名为

{% for message in request|last_three_messages %}