Django模板用forloop计数器实现Bootstrap4自定义网格布局排版出错如何解决
问题根因
- 标签嵌套逻辑错误:你定义的外层包裹
<div>放在了if分支内开启,却在else分支内闭合,导致DOM结构完全错乱,浏览器无法正确识别网格层级。 - 网格结构逻辑错误:你把每一篇文章都单独套了
col-lg-4类,而实际上小体积的资讯条目应该堆叠在同一列内,不需要每一条都开新的网格列,超出12列的元素会自动换行,直接导致排版错乱。 - 特色文章布局逻辑错误:如果你的设计是首篇为大尺寸特色文章,剩下的小文章分两列排布,那你不应该把所有文章都放在同一个循环内生成列容器,应该先单独渲染首篇特色文章的列,再把剩下的文章分组放到另外两个列容器内。
修正后代码示例
<!-- 外层行容器 放在循环外部 --> <div class="row"> <!-- 第一列:首篇特色文章 --> <div class="col-lg-4 col-md-12 mb-4 mb-lg-0"> {% with healtharticles|first as featured_article %} <div> <!-- 特色图 --> <div class="bg-image hover-overlay shadow-1-strong ripple rounded-5 mb-4" data-mdb-ripple-color="light"> <img src="https://mdbootstrap.com/img/new/fluid/city/113.jpg" class="img-fluid" /> <a href="#!"> <div class="mask" style="background-color: rgba(251, 251, 251, 0.15);"></div> </a> </div> <!-- 文章元数据 --> <div class="row mb-3"> <div class="col-6"> <a href="" class="text-info"> <i class="fas fa-plane"></i> Travels </a> </div> <div class="col-6 text-end"> <u> 15.07.2020</u> </div> </div> <!-- 文章标题和描述 --> <a href="" class="text-dark"> <h5>This is title of the news</h5> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit, iste aliquid. Sed id nihil magni, sint vero provident esse numquam perferendis ducimus dicta adipisci iusto nam temporibus modi animi laboriosam? </p> </a> </div> {% endwith %} </div> <!-- 第二列:第2、4、6...篇小文章 --> <div class="col-lg-4 col-md-12 mb-4 mb-lg-0"> {% for article in healtharticles|slice:"1::2" %} <hr /> <!-- 资讯条目 --> <a href="" class="text-dark"> <div class="row mb-4 border-bottom pb-2"> <div class="col-3"> <img src="https://mdbootstrap.com/img/new/standard/city/041.jpg" class="img-fluid shadow-1-strong rounded" alt="" /> </div> <div class="col-9"> <p class="mb-2"><strong>Lorem ipsum dolor sit amet</strong></p> <p> <u> 15.07.2020</u> </p> </div> </div> </a> {% endfor %} </div> <!-- 第三列:第3、5、7...篇小文章 --> <div class="col-lg-4 col-md-12 mb-4 mb-lg-0"> {% for article in healtharticles|slice:"2::2" %} <hr /> <!-- 资讯条目 --> <a href="" class="text-dark"> <div class="row mb-4 border-bottom pb-2"> <div class="col-3"> <img src="https://mdbootstrap.com/img/new/standard/city/041.jpg" class="img-fluid shadow-1-strong rounded" alt="" /> </div> <div class="col-9"> <p class="mb-2"><strong>Lorem ipsum dolor sit amet</strong></p> <p> <u> 15.07.2020</u> </p> </div> </div> </a> {% endfor %} </div> </div>
调整说明
- 把三个
col-lg-4列容器提到循环外,避免每篇文章生成多余的列容器 - 单独提取首篇文章作为特色内容渲染
- 用切片把剩下的文章分成两组,分别填充到后两列中实现堆叠效果
- 修正了标签闭合错误,保证DOM结构完整合规
内容的提问来源于stack exchange,提问作者Maciej Urmański
相关产品推荐
相关产品推荐

