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

Django中如何用模板循环展示菜单及对应子菜单?

Django 层级菜单模板实现方案

1. 确认模型关联参考示例

确保你的模型外键关联设置了related_name,方便模板直接调用子菜单:

# models.py
from django.db import models

class Menu(models.Model):
    name = models.CharField(max_length=100, verbose_name="菜单名称")
    url = models.CharField(max_length=200, blank=True, verbose_name="菜单链接")

    def __str__(self):
        return self.name

class Submenu(models.Model):
    menu = models.ForeignKey(Menu, on_delete=models.CASCADE, related_name="submenus", verbose_name="所属菜单")
    name = models.CharField(max_length=100, verbose_name="子菜单名称")
    url = models.CharField(max_length=200, blank=True, verbose_name="子菜单链接")

    def __str__(self):
        return self.name

2. 优化视图查询减少数据库请求

在views.py中用prefetch_related一次性加载关联子菜单,避免N+1查询问题:

# views.py
from django.shortcuts import render
from .models import Menu

def menu_view(request):
    menus = Menu.objects.prefetch_related('submenus').all()
    return render(request, 'menu.html', {'menus': menus})

3. 模板嵌套循环展示层级菜单

在模板文件如menu.html中,通过双层for循环实现层级展示:

<!-- menu.html -->
<ul class="main-menu">
    {% for menu in menus %}
        <li class="menu-item">
            <a href="{{ menu.url }}">{{ menu.name }}</a>
            {% if menu.submenus.exists %}
                <ul class="sub-menu">
                    {% for submenu in menu.submenus.all %}
                        <li class="submenu-item">
                            <a href="{{ submenu.url }}">{{ submenu.name }}</a>
                        </li>
                    {% endfor %}
                </ul>
            {% endif %}
        </li>
    {% endfor %}
</ul>

可选:添加基础样式区分层级

如果需要简单美化,可添加CSS:

.main-menu {
    list-style: none;
    padding-left: 0;
    background: #f5f5f5;
}
.menu-item {
    padding: 8px 16px;
    border-bottom: 1px solid #ddd;
}
.sub-menu {
    list-style: none;
    padding-left: 20px;
    background: #fff;
}
.submenu-item {
    padding: 4px 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:04:51