【问题标题】:Forloop.counter in DjangoDjango 中的 Forloop.counter
【发布时间】:2020-06-22 19:48:25
【问题描述】:
{% for each_item in item.artifacts %}
    {% if each_item.scanner_count > 0 and each_item.scanner_match > 0 %}
        {% if forloop.counter <= 5 %}
            <tr>
            <td>{{each_item.threat_name}}</td>
            </tr>
        {% else %}
            {% if forloop.last %}
                <p><b><i> {{ forloop.counter|add:"-5" }} rows were truncated. See full report for more details. </i></b></p>
            {% endif %}    
        {% endif %}
    {% else forloop.counter -=1 %}    
    {% endif %}
{% endfor %}

错误:第 171 行的模板标记格式错误:“else forloop.counter -=1” 我只想在条件成功时增加计数器。不知道如何使用 forloop.counter 来做到这一点。目标是打印 5 行有效输出(扫描仪计数 >0 且扫描仪匹配 >0)

【问题讨论】:

  • {% else forloop.counter -=1 %} 应该做什么,您可以更改 forloop 计数器。
  • 我只是想打印 5 个有效输出。不知道如何控制柜台@Willem Van Onsem
  • 您无法控制for 计数器。 Django 模板语言被故意限制以避免人们在模板中编写业务逻辑。
  • 对于循环模板来说,这听起来逻辑太多了。我会尝试将其限制为仅在我看来有效的项目。计数器更适用于行号等内容。
  • 如果 Valid 行超过五,我想截断其余的。@WillemVanOnsem

标签: python django templates


【解决方案1】:

正如其他评论者所指出的,您不能在模板中分配forloop.counter,因为这将被视为应该在视图(控制器)中的逻辑。从您的代码中删除{% else forloop.counter -= 1 %},它应该可以按照我的预期工作。如果没有,请在传递给模板的对象(上下文)中添加逻辑,或者在此处的 Django 文档中添加其他 forloop 属性/变量:https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#for

【讨论】:

  • 如果有效行数超过五,我想截断其余的@Mike Hawkins
  • 截断为不显示它们或显示它们的不同(缩短)版本?
  • 在这种情况下,您应该能够从代码中删除 {% else forloop.counter -= 1 %} 并且它应该可以工作。计数器在遍历对象时自动更新。
【解决方案2】:

您可以使用add 和forloop 计数器的组合来实现您想要实现的目标。但请记住,您需要传递一些变量(我在这里使用了rank 来将增量变量存储在模板中。

views.py

rank = 0 
return render(request, "base.html", {"items": items, "rank": rank})

html

{% for each_item in items %}
    {% if each_item.scanner_count > 0 and each_item.scanner_match > 0 %}
      {% if forloop.counter|add:rank <= 5 %}
        <tr><td>{{each_item.threat_name}}</td></tr>
        <br>
      {% else %}
        {% if forloop.last %}
          <p><b><i> {{ forloop.counter|add:"-5" }} rows were truncated. See full report for more details. </i></b></p>
        {% endif %}
      {% endif %}
    {% endif %}
{% endfor %}

【讨论】:

  • 这给出错误:无法解析剩余部分
  • 怎么会报错。那是不可能的。我确信上面的代码会 100% 工作。你能告诉我完整的追溯吗?或者你可以完全复制上面的代码而不是直接修改你的代码。
  • 我正在初始化 rank =0,然后在 context ={ "rank":rank} 中添加它,然后使用你的代码
  • 嘿,我们在哪里增加排名值?不应该是 {{rank}}
  • 因此,不是根据扫描仪计数和扫描仪匹配过滤模板中的行。我在我编写的用于解析 json 的代码中编写了该逻辑。 :)
猜你喜欢
  • 2011-07-13
  • 2010-11-16
  • 2022-08-07
  • 2019-02-26
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2012-07-04
  • 2019-04-16
相关资源
最近更新 更多