在Django中如何隐藏base.html模板的特定代码段使其不在首页显示
解决方案
问题根源
你当前代码的核心问题有两点:
- 父模板base.html中定义的面包屑块名为
header_parent,但普通子页面中声明的空块名为header,二者名称不匹配,无法覆盖父模板的对应内容 - 如果你将
header_parent块定义在了base.html的content块外部,那么在子页面的content块内定义任何块,都无法作用到外部的header_parent块
方案一:子模板覆盖父块(灵活可控)
无需修改base.html和普通子页面,仅修改home.html,直接重写header_parent块为空即可隐藏面包屑:
{% extends "base.html" %} {% load static %} {% block header_parent %}{% endblock %} {% block content %} <p>Home</p> {% endblock content %}
后续如果有其他页面也需要隐藏面包屑,只要在对应子页面加上{% block header_parent %}{% endblock %}即可。
方案二:父模板加路径判断(无需改子页面)
如果只有首页需要隐藏面包屑,可直接在base.html中给面包屑代码加路径判断,不用修改任何子页面:
{% if request.resolver_match.url_name != 'home' %} {% block header_parent %} <!-- ***** Breadcumb Area Start ***** --> <div class="mosh-breadcumb-area" style="background-image: url({% static 'img/core-img/breadcumb.png' %})"> <div class="container h-100"> <div class="row h-100 align-items-center"> <div class="col-12"> <div class="bradcumbContent"> <h2>{{page_title}}</h2> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="{% url 'home' %}">Home</a></li> <li class="breadcrumb-item active" aria-current="page">{{page_title}}</li> </ol> </nav> </div> </div> </div> </div> </div> <!-- ***** Breadcumb Area End ***** --> {% endblock %} {% endif %}
注意:使用该方案需要确保settings.py的TEMPLATES配置项中,context_processors列表已添加django.template.context_processors.request,否则模板无法获取request变量。
内容的提问来源于stack exchange,提问作者project.py
相关产品推荐
相关产品推荐

