【发布时间】:2016-11-23 05:47:33
【问题描述】:
以前可能有人遇到过这种情况,甚至文档也可能已经提供了解决方案,但我还没有找到。我的情况是这样的:
只是为了说明真正的问题:假设我有一个传递给模板的列表,以及我迭代的列表,在一个实例中使用 {% for...,在另一个实例中,我只需要显示它的第一个仅 5 个元素(例如基于某些条件,而不仅仅是列表的前 5 个元素)。两个循环都用于动态输出表格。现在,这是第二个棘手的实例......我采用了the solution here,它利用一个特殊的计数器类,传递给模板上下文,并且必须调用Counter.increment方法,才能增加计数器 -然后我在条件语句中使用它来停止循环的执行。
挑战:
我目前有这样的代码:
<script>{{ Counter.reset }}</script>
<table>
...
{% for l in list %}
{%if Counter.counter <= 5 %}
<tr><td>{{ l.some_field }} <span style="display:none">{{ Counter.increment }}</span></td></tr>
{% endif %}
{% endfor %}
</table>
那么,我怎样才能只调用Counter.increment 方法,而不需要封装它的<span>(因此该代码的输出不会发送到浏览器)?这样做可以吗:
<tr><td>{{ l.some_field }}{{ Counter.increment }}</td></tr>
如果Counter.increment 没有返回任何东西,上面的方法会起作用,但如果它返回了怎么办?!
那么如何最好地抑制在 Django 模板中执行 python 代码的输出?
【问题讨论】:
-
@solarissmoke 我的问题的限制方面只是我用来说明真正问题的一个场景 - 这是:在 Django 模板中执行 python 代码的输出如何最好被抑制了? 这个问题没有得到解决,不管我们是在谈论
Counter.increment的输出还是其他一些任意的方法调用或变量输出。 -
我在这方面的建议是,如果您发现自己在模板级别执行这样的复杂逻辑,您需要重新考虑它并找到一种方法在您的视图(或模板中)执行逻辑标签)。
标签: python django django-templates