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

Django机器详情页继承主页后侧栏内容不显示求助

问题原因与解决方案

核心问题

你的machine_detail.html继承自home.html但侧边栏为空,根本原因是:machine_detail视图未传递侧边栏渲染所需的equipments变量。home.html的侧边栏依赖equipments字典遍历生成内容,而machine_detail视图仅传递了machine_detail变量,模板无法获取数据,因此侧边栏无内容。

另外,home视图存在一处错误:返回渲染的模板是user/sidebar.html,但根据描述应该是user/home.html,否则首页结构也会异常。


解决方案

1. 修正machine_detail视图,传递侧边栏数据

更新视图代码,添加equipments数据的生成与传递,同时用prefetch_related优化数据库查询(避免N+1查询问题):

def machine_detail(request,pk):
    machine_detail = models.Machines.objects.get(pk=pk)
    # 预加载关联机器数据,提升查询性能
    equipments = models.Equipment.objects.prefetch_related('typeOfMachine').all()
    eq_map = {e: e.typeOfMachine.all() for e in equipments}
    return render(request, "user/machine_detail.html", {"machine_detail": machine_detail, "equipments": eq_map})

2. 修正home视图的模板渲染路径

将home视图中渲染的模板改为user/home.html:

def home(request):
    # 使用prefetch_related减少数据库查询次数
    equipment = models.Equipment.objects.prefetch_related('typeOfMachine').all()
    eq_map = {e: e.typeOfMachine.all() for e in equipment}
    return render(request, "user/home.html", {'equipments': eq_map})

3. 优化模板HTML结构(可选但推荐)

原模板中<a>标签嵌套<li>不符合HTML规范,调整结构确保语义正确:

<!-- home.html 侧边栏部分 -->
<ul class="list-unstyled components">
    {% for equipment,machines in equipments.items %}
    <li>
        {{ equipment.name }} <i class="fa fa-caret-down"></i>
        <!-- 添加子列表包裹机器项 -->
        <ul>
            {% for m in machines %}
            <li><a href="{% url 'machineDetail' pk=m.pk %}">{{ m.name }}</a></li>
            {% endfor %}
        </ul>
    </li>
    {% endfor %}
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:27:29