错误信息:“django.template.exceptions.TemplateSyntaxError:第82行上的块标记无效:“break”,应为“elif”、“else”或“endif”。您是否忘记注册或加载此标签?“
这个错误是因为我试图在Django模板的块标记中使用break
语句。
为了修复这个错误,我将其替换为block标记中的return
语句。这将立即终止if
语句。但错误仍然是一样的。
下面是代码:
<div class="card">
<h5 class="mb-30">By Categories</h5>
<div class="categories-dropdown-wrap font-heading">
<ul>
{% for c in categories %}
<li>
<input
data-filter="category"
class="form-check-input filter-checkbox"
type="checkbox"
name="checkbox"
id="exampleCheckbox2"
value="{{ c.id }}"
/>
<a href="{% url 'core:category-product-list' c.cid %}">
<img src="{{c.image.url}}" alt="" />{{ c.title }}</a
>
</li>
{% if c.loop.index == 5 %}
<li>
<p>This is the 5th category.</p>
</li>
{% break %}
{% endif %}
{% endfor %}
</ul>
</div>
</div>
我的目标是停止循环后,上市5个项目的类别,请我需要帮助来解决这个问题
2条答案
按热度按时间zujrkrfu1#
@Tarquinius谢谢,老板,我找到了另一种方法来解决它,使用 slice 来限制我的迭代次数,然后从views.py中修剪添加到上下文中的条目数量。我用这个返回列表的一部分,我可以将它限制在几个地方,而不是整个函数,例如侧边栏上的类别列表现在只能有5个项目,而类别列表页面有完整的列表。
下面是更新后的代码:
参考片
wwwo4jvm2#
这将是一个选择:
arr = ["tool1", "tool2", ... , "tool10"]
基本上,这段代码所做的不是中断for循环,而是在不满足条件时输入“nothing”。另一句话:在迭代五次之后,它不再插入变量,而是插入“nothing”。
你现在可能会想争辩:“打破循环而不是在不插入任何东西的情况下继续迭代过程会更有效”。是的,我同意。但是为了使这个过程更有效,您的方法是在将列表传递给模板之前,在视图中将列表的长度削减到一个合适的长度。据我所知,没有办法打破djangos模板语言中的循环。
{% break %}
不是djangos模板语言中的内置关键字,因此默认情况下它总是以语法错误结束。所以这个错误与你把它放在{% block ... %}
标签中的事实无关。阅读更多关于
forloop.revcounter0