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

Django模板block内容失效求助:导航栏无法正常显示

Django模板导航栏不显示的问题原因分析

核心问题1:子模板重复定义完整HTML结构

你的dashboard.html在使用{% extends "base.html" %}之后,又重新编写了<html>、<head>、<body>等完整HTML骨架。在Django模板继承机制中,子模板的这些内容会完全覆盖父模板(base.html)的对应结构,导致父模板中<body>内的导航栏代码被直接忽略,只渲染子模板自己的结构。

核心问题2:空的nav块覆盖了父模板内容

你在子模板中定义了空的{% block nav %}{% endblock %},这会直接替换父模板base.html中nav块里的导航栏代码,所以导航栏完全不显示。如果需要保留父模板的导航栏,要么不重写这个块,要么在块内使用{{ block.super }}来继承父模板的内容。


修复后的代码示例

调整base.html,添加可填充的块

先给父模板补充head和content块,方便子模板填充自定义内容:

{% load static %}
{% load custom_tags %}
<!DOCTYPE html>
<html lang="en">
    {% block head %}
    {% endblock %}
        
    <body>
        <style>
            html {
                scroll-behavior: smooth;
            }
            *,
            body {
                margin: 0;
            }
            body {
                display:flex; flex-direction:row;
                background: #030914;
                background: url('/static/dashimages/map.svg'), #030914;;
                background-attachment: fixed;
                overflow-y:scroll;
            }
            .nav-container {
                width: 200px;
                padding: 20px;
                position: fixed;
               top: 0;
               left: 0;
               height: 100%;
               max-height: 100vh;
               border-right:  2px solid rgba(33, 40, 54, 0.5);
               overflow: hidden;
               padding-top: 35px;
              }
            .nav-links {
                display:flex;
                flex-direction:column;
                justify-content:center;
                align-items:center;
                gap: 25px;
                margin-top: 30px;
            }
            .nav-link {
                display:flex;
                flex-direction:row;
                justify-content: flex-start;
                width: 110%;
                padding: 14px 20px;
                gap: 20px;
               transform: rotate(5deg);
            }
            .nav-link:hover {
                cursor: pointer;

            }
            .nav-link a {
                font-family: 'Poppins';
                font-weight: 700;
                font-size: 19px;
                color: rgba(255, 255, 255, 0.15);
            }
            .nav-link img {
                width: 25px;
                height: 25px;
            }
            .nav-active a {
                background: linear-gradient(90deg, #A2FACF 0%, #64ACFF 101.4%);
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
                background-clip: text;
                text-fill-color: transparent;
            }
            .nav-active {
                background: linear-gradient(90deg, rgba(162, 250, 207, 0.10) 0%, rgba(100, 172, 255, 0.1) 101.4%);
            }
        </style>
        {% block nav %}
       <div class="nav-container">
        <img src="{% static 'levelstatic/assets/coderalogo.svg' %}" style="margin: 0 auto;
        width: 80%; margin-bottom: 25px;" alt="CODERA">
            <div class="nav-links">
                <div class="nav-link nav-active">
                    <img src="{% static '/dashimages/learn.svg' %}"> 
                    <a>LEARN</a>
                </div>
                <div class="nav-link">
                    <img src="{% static '/dashimages/review.svg' %}"> 
                    <a>REVIEW</a>
                </div> 
                <div class="nav-link">
                    <img src="{% static '/dashimages/progress.svg' %}"> 
                    <a>PROGRESS</a>
                </div> 
                <div class="nav-link">
                    <img src="{% static '/dashimages/compete.svg' %}"> 
                    <a>COMPETE</a>
                </div> 
            </div>   
       </div>
       {% endblock%}

       {% block content %}
       {% endblock %}
    </body>
</html>

修改dashboard.html,正确继承模板

删除重复的HTML骨架,通过块填充内容,保留父模板导航栏:

{% extends "base.html" %}
{% load static %}
{% load custom_tags %}

{% block head %}
    <script defer data-domain="codera.app" src="https://plausible.io/js/script.js"></script> <!--PLAUSIBLE-->
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    {% comment %} <link rel="stylesheet" href="{% static 'dashboardstyle.css' %}"> {% endcomment %}
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
        href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Space+Grotesk:wght@500;700&display=swap"
        rel="stylesheet"
    />
    <link rel="icon" type="image/x-icon" href="{% static 'levelstatic/assets/fav.ico' %}">
    <link href="https://fonts.googleapis.com/css2?family=Gloria+Hallelujah&display=swap" rel="stylesheet"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.3/gsap.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    {% comment %} <script type="text/javascript" src="{% static 'dashboardscript.js' %}" defer></script> {% endcomment %}
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script> 
    <title>Codera | Dashboard</title>
{% endblock %}

{% block nav %}
    {{ block.super }} {# 继承base.html中的导航栏内容 #}
{% endblock %}

{% block content %}
    <style>
        h1 {
            font-family: 'Space Grotesk';
            font-style: normal;
            font-weight: 700;
            color:rgba(255,255,255, .90);
        }
    </style>
    
    <div class="maincontainer">
        <div class="leftcontent">
            <div class="levelscontainer">
                <div id="levels"></div>
            </div>
        </div>
        <div class="rightcontent">
            <div class="top">
                <div class="points focus">
                    <img src="{% static '/dashimages/focusclock.svg' %}" style="width:20px; filter: invert(19%) sepia(1%) saturate(6780%) hue-rotate(187deg) brightness(88%) contrast(100%);"> 
                    <p>FOCUS</p>
                </div>
                <div class="points">
                    <img src="{% static '/dashimages/medal.png' %}" style="width:20px;"> 
                    <p style="color:#F69C18;">{{medals}}</p>
                </div>
                <div class="points">
                    <img src="{% static '/dashimages/fire.svg' %}" style="width:25px;"> 
                    <p style="color: #FFC001;">{{streaks}}</p>
                </div>
                <div class="points">
                    <img src="{% static '/dashimages/diamond.png' %}" style="width:25px;"> 
                    <p style="color: #30E1B9;">{{diamonds}}</p>
                </div>
            </div>
            <div class="bottom">
                <div class="box">
                   <div class="message">
                    <img src="{% static '/dashimages/drvega.png' %}" style="width:70px; height: 70px;"> 
                    <div class="messagetitle">
                        <h1>Dr. Vega</h1>
                        <p>Incoming message</p>
                        <button>VIEW MESSAGE</button>
                    </div>
                   </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

额外注意点

  • 子模板中不要重复定义父模板已有的HTML结构,仅通过块填充或替换部分内容即可。
  • 若需保留父模板块的内容,必须使用{{ block.super }},否则子模板的块会完全覆盖父模板对应块的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:27:02