You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板(index.html)中两列布局循环如何正确编写?

解决两列布局循环重复代码与图片重复问题

看起来你现在的问题根源很明确:你在{% for %}循环里,每遍历一个dest就重复输出了两个完全一样的div,而且都用了同一个dest.img,这自然会导致图片重复显示,完全没达到复用代码的目的。

我给你两种针对性的解决方案,根据你的实际布局需求选:

方案1:自动两列布局(推荐)

如果你的需求是让所有dest项自动排成两列,不需要手动分组,那只需要在循环里生成单个div,然后用CSS的Grid或Flex来实现两列布局,既避免重复代码,又不会重复渲染图片:

{% static 'images/fulls' as baseUrl %} 
{% static 'images/thumbs' as hiUrl %} 
<section class="thumbnails">
  {% for dest in dests %}
    <div>
      <a href="{{baseUrl}}/{{dest.img}}">
        <img src="{{hiUrl}}/{{dest.img}}" alt="{{dest.title}}" /> <!-- 建议用dest的标题做alt,更符合语义化 -->
        <h3>{{dest.title}}</h3> <!-- 替换固定文本为dest的动态标题,更合理 -->
      </a>
    </div>
  {% endfor %}
</section>

然后在你的CSS文件里添加布局样式(别写在inline里,维护性差):

.thumbnails {
  display: grid;
  grid-template-columns: repeat(2, 1fr); /* 两列等宽 */
  gap: 1.5rem; /* 列之间的间距 */
}

方案2:手动分组每行两列

如果你的需求是严格每行显示两个dest项,那可以利用Django模板的循环计数器来分组,避免重复代码的同时保证布局结构:

{% static 'images/fulls' as baseUrl %} 
{% static 'images/thumbs' as hiUrl %} 
<section class="thumbnails">
  {% for dest in dests %}
    <!-- 每两个项开始新的一行 -->
    {% if forloop.counter0|divisibleby:2 %}
      <div class="row">
    {% endif %}
        <div class="col">
          <a href="{{baseUrl}}/{{dest.img}}">
            <img src="{{hiUrl}}/{{dest.img}}" alt="{{dest.title}}" />
            <h3>{{dest.title}}</h3>
          </a>
        </div>
    <!-- 每两个项结束行,或者循环到最后一个项时闭合行 -->
    {% if forloop.counter|divisibleby:2 or forloop.last %}
      </div>
    {% endif %}
  {% endfor %}
</section>

对应的CSS样式:

.thumbnails .row {
  display: flex;
  gap: 1.5rem;
  margin-bottom: 1.5rem;
}
.thumbnails .col {
  flex: 1; /* 两列等宽 */
}

关键提醒

你原来的代码里把两个完全相同的div塞进循环里,等于每个dest都被渲染了两次,这就是图片重复的核心原因。我们的思路是让每个dest只被渲染一次,用CSS布局实现两列效果,或者用循环计数器分组,这样既解决了重复代码问题,也不会出现图片重复的情况。

内容的提问来源于stack exchange,提问作者Dania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:04:49