代码之家  ›  专栏  ›  技术社区  ›  almost a beginner

使用返回查询的参数循环自定义标记

  •  1
  • almost a beginner  · 技术社区  · 6 年前

    我的自定义标记是:

    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”语句应使用“for x in y”格式:for message in 最后三条信息请求

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Roseman    6 年前

    您还没有调用标记;仅引用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 %}