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

如何在Twig中展示无限层级的分类子项?

别担心,Twig其实完全支持递归渲染这种树形结构的数组,只是得用它专门的{% recursive %}标签来实现。我来帮你调整代码解决这个问题:

基础递归渲染方案

直接修改你的循环,加上递归标记并处理子节点:

{% for category in categories recursive %}
    <div class="category">
        <div class="id">{{ category.id }}</div>
        {# 先判断子节点是否是可遍历的数组,避免处理'none'这类非数组值 #}
        {% if category.children is iterable and category.children is not empty %}
            <div class="sub-categories">
                {# 调用loop()触发递归,把当前分类的子节点传给循环本身 #}
                {{ loop(category.children) }}
            </div>
        {% endif %}
    </div>
{% endfor %}

补充说明

  • {% recursive %}是核心:它告诉Twig这个for循环允许递归调用自己,专门用来处理嵌套结构。
  • loop(category.children):这行代码就是触发递归的关键,把当前分类的子节点数组重新传入循环,实现逐层渲染。
  • 加is iterable判断:因为你的数组里存在children => 'none'的情况,这个判断能避免Twig尝试遍历非数组类型而报错;is not empty则是防止空数组时没必要渲染子节点容器。

进阶:给不同层级加样式区分

如果需要给不同深度的分类加样式(比如缩进),可以用Twig提供的loop.depth变量,它会记录当前递归的层级:

{% for category in categories recursive %}
    <div class="category level-{{ loop.depth }}">
        <div class="id">{{ category.id }}</div>
        {% if category.children is iterable and category.children is not empty %}
            <div class="sub-categories">
                {{ loop(category.children) }}
            </div>
        {% endif %}
    </div>
{% endfor %}

之后你就可以通过CSS的.level-1、.level-2类来给不同层级的分类设置差异化样式了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:22