Django模板中为何基础模板图片无法覆盖子模板图片?
解决方案
你的问题根源是子模板重写了base.html的brand块,导致所有继承该子模板的页面(包括根路径)都显示reviews/logo.png。以下是两种直接有效的解决方式:
方案一:调整模板继承结构
- 根路径对应的模板直接继承
base.html,不重写brand块,这样会自动使用base里默认的static/logo.png:
{% extends "base.html" %} {% load static %} <!-- 根页面其他内容 -->
- 其他子页面的模板保持现有代码不变,继承
base.html并重写brand块显示reviews/logo.png:
{% extends "base.html" %} {% load static %} {% block brand %} <img src="{% static 'reviews/logo.png' %}"/> {% endblock %} <!-- 子页面其他内容 -->
方案二:在base.html中动态判断路径切换logo
无需修改子模板,直接修改base.html的代码,利用request对象判断当前访问路径,自动切换logo:
{% load static %} <a class="navbar-brand" href="/"> {% if request.path == '/' %} <img src="{% static 'logo.png' %}" /> {% else %} <img src="{% static 'reviews/logo.png' %}" /> {% endif %} </a>
注意:使用该方案需要确保
settings.py的TEMPLATES配置中,context_processors包含'django.template.context_processors.request',这样模板才能获取到request对象。
内容的提问来源于stack exchange,提问作者VOZ ESTOICA
相关产品推荐
相关产品推荐

