之前有人可能已经遇到过这种情况,甚至可能已经提供了解决方案,但我还没有找到解决方案。我的情况是这样的:
只是为了说明真正的问题:假设我有一个列表,我传递给模板,我迭代了哪个列表,在一个实例中有一个{% for...
,另一个,我只需要显示它的前5个元素(例如,基于某些条件,而不仅仅是列表的前5个元素)。两个循环都用于动态输出表。现在,这是第二个很棘手的实例......我采用了the solution here,它利用了一个特殊的Counter类,传递给了模板上下文,并且必须在其上调用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代码的输出呢?
答案 0 :(得分:1)
答案 1 :(得分:1)
您还可以使用window.onbeforeunload = function ( e ) {
var e = e || window.event ;
// For Firefox and IE
if ( e ) {
e.ReturnValue = 'Any string' ;
}
// For Safari
return 'Any string' ;
}
标记并忽略变量:
with
答案 2 :(得分:0)
如果您只需要前五个元素,那么我认为正确的方法是首先从您的视图中仅将前5个元素的列表发送到您的html模板。< / p>
此外,如果由于某种原因,你无法做到这一点,那么你应该在Django中有一个称为模板标签的东西,你可以在那里进行所有的计算。
看到这个 - &gt; https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/
最后,如果你仍然想使用Counter.increment,那么只需将它放在div中,然后说'&34; count-flag&#34;并使用您的JavaScript,在页面加载时永远隐藏该div:
$(document).on('ready', function(){
$("#count-flag").hide();
}
所以它不会显示在你的html上,但从技术上讲,这不是你的方法。