Laravel转Django循环计数器重置问题技术求助
解决Django模板循环中计数器不更新的问题
我来帮你搞定这个问题!你遇到的核心问题是Django模板的变量处理逻辑和Laravel不一样:你在视图里定义的number是一个固定的初始值0,模板里的{{number|add:1}}只是计算并展示加1后的结果,并不会真正修改number变量本身。所以每次循环都会用初始的0来判断条件,自然永远进入if分支。
正确的解决方案:使用Django模板自带的循环计数变量
Django模板的for循环自带几个内置变量,专门用来处理循环计数,完全不需要你手动在视图里传number。最贴合你需求的是forloop.counter0(从0开始计数),和你原来Laravel代码里的$a逻辑完全一致:
修改后的模板代码:
{% for photography in photographies.all %} {% if forloop.counter0|divisibleby:2 %} <li class="grid-item"> <img class="img img-fluid" src="{{ photography.image.url }}" /> </li> {% else %} <li class="grid-item grid-item--width2"> <img class="img img-fluid" src="{{ photography.image.url }}" /> </li> {% endif %} {% endfor %}
简化后的视图代码(可以删掉无用的number变量):
def home(request): photographies = Photography.objects.all() return render(request, 'photographies/home.html', { 'photographies': photographies, })
补充说明:
forloop.counter0:从0开始,每循环一次加1,完美对应你原来的$a变量逻辑- 如果习惯从1开始计数,可以用
forloop.counter,此时判断条件要改成{% if not forloop.counter|divisibleby:2 %}(因为第1次循环是奇数,对应原来$a=0的情况) - Django模板是无逻辑设计,不允许在模板里直接修改变量的值,所以所有循环计数、条件判断都要依赖内置变量或者视图提前处理好的数据
内容的提问来源于stack exchange,提问作者ciarpaglini
相关产品推荐
相关产品推荐

