如何在Django项目仪表盘的三个模块中移除导航栏
解决方案
方案一:拆分模板(推荐)
核心思路是把模块的完整页面和内容片段分离,避免重复加载基础模板的导航栏:
- 新建
todolist/_content.html,只保留原todolist/index.html中导航栏之外的核心内容(不需要写{% extends 'base.html' %}和block结构,直接放卡片要展示的内容)。 - 修改原
todolist/index.html,让它继承base.html并引入内容片段:
{% extends 'base.html' %} {% block title %}Todo List{% endblock %} {% block content %} {% include 'todolist/_content.html' %} {% endblock %}
- 修改仪表盘模板,改为引入内容片段而非完整页面:
{% extends 'base.html' %} {% block title %}Dashboard{% endblock %} {% block content%} <div class="container-fluid"> <h1 class="fw-bold">Dashboard</h1> <div class="row"> <div class="col-sm-4"> <div class="card"> <div class="card-body" > {% include 'todolist/_content.html' %} </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> {% include 'todolist/_content.html' %} </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> {% include 'todolist/_content.html' %} </div> </div> </div> </div> </div> {% endblock %}
方案二:通过模板变量控制导航栏显示
如果不想拆分模板,可在基础模板中添加条件判断,动态控制导航栏是否显示:
- 修改
base.html,将导航栏放在自定义block中并添加条件:
<!-- base.html --> {% block navbar %} {% if show_navbar != False %} <!-- 原导航栏代码 --> <nav>...</nav> {% endif %} {% endblock %}
- 修改仪表盘模板,在include模块时传入
show_navbar=False参数:
{% extends 'base.html' %} {% block title %}Dashboard{% endblock %} {% block content%} <div class="container-fluid"> <h1 class="fw-bold">Dashboard</h1> <div class="row"> <div class="col-sm-4"> <div class="card"> <div class="card-body" > {% include 'todolist/index.html' with show_navbar=False %} </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> {% include 'todolist/index.html' with show_navbar=False %} </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> {% include 'todolist/index.html' with show_navbar=False %} </div> </div> </div> </div> </div> {% endblock %}
这样模块页面单独访问时导航栏正常显示,被仪表盘include时导航栏会自动隐藏。
内容的提问来源于stack exchange,提问作者Nightdragon22
相关产品推荐
相关产品推荐

