Django Admin模板覆盖失效求助:AdminSite属性为何优先级更高?
Django Admin模板覆盖修改标题无效的原因
核心问题在于:Django Admin的base_site.html模板中,页面标题是通过site_header变量渲染的,而非固定静态文本。
模板覆盖没生效的原因
Django原生
admin/base_site.html里的标题代码是这样的:<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>标题内容由
site_header变量控制,这个变量默认取AdminSite类的site_header属性值。如果你只是复制模板后修改了模板里的Django administration静态文本,但没替换掉{{ site_header }}变量,页面渲染时还是会用AdminSite属性里的值,自然看不到变化。修改原生模板没用的原因
大概率是你改的内容不对——模板里的
_('Django administration')是default过滤器的备用值,只要site_header变量有值,这个备用文本就不会生效,标题还是显示AdminSite属性的内容。修改
AdminSite.site_header生效的原因这个属性直接决定了
site_header变量的取值,模板渲染时优先使用它,自然能直接改变标题。正确的模板覆盖操作
要让模板覆盖生效,你需要在自定义的
admin/base_site.html里,把变量渲染部分替换成你想要的静态文本,比如:<h1 id="site-name"><a href="{% url 'admin:index' %}">我的Django后台管理</a></h1>或者想保留变量逻辑但改默认值的话,调整模板里的备用文本:
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('我的Django后台管理') }}</a></h1>
内容的提问来源于stack exchange,提问作者botanich
相关产品推荐
相关产品推荐

