如何使用nav-global进行导航并隐藏django管理应用中的面包屑。我已经找到了做到这一点的方法,但它们似乎是hackish和有问题的。我正在寻找一个干净可靠的解决方案。
天真无效的方法
自定义admin / base_site.html
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
{% block branding %}
<h1 id="site-name">{% trans 'Django administration' %}</h1>
{% endblock %}
{% block nav-global %}Some links will go here...{% endblock %}
{% block breadcrumbs %}{% endblock %}
这不起作用,因为扩展base_site.html的django admin中的模板(例如change_list.html)将定义面包屑的内容,这将覆盖我在base_site.html中设置的内容。
解决方案1:CSS
使用extrastyle块将以下css添加到admin。这样可行,但仍然会生成痕迹并显示在HTML源代码中。这感觉很糟糕。
.breadcrumbs {
display: none;
}
解决方案2:覆盖base.html
覆盖base.html并删除breadcrumbs块。孩子们会尝试定义它,但它永远不会存在,所以它永远不会被渲染。这看起来也像是一个黑客。覆盖base.html也不是一个好主意,因为每个Django版本都可以对base.html进行许多更改,而管理应用程序可能会在各版本之间中断。
答案 0 :(得分:2)
扩展要渲染空面包屑块的所有模板。您的第一次尝试(您说没有工作)将起作用,也可以扩展其他模板。像change_list.html:
{% extends "admin/change_list.html" %}
{% block breadcrumbs %}
{% endblock %}
change_form.html:
{% extends "admin/change_form.html" %}
{% block breadcrumbs %}
{% endblock %}
同样的:
login.html和index.html有一个空的面包屑块。
缺点是每个应用都需要应用模板。这意味着重复的模板。如果您想使用单个模板进行项目扩展,最终会遇到其他问题:复制完整的原始模板或让模板扩展/path/to/site-packages/django/contrib/admin/templates/template_name.html
。
答案 1 :(得分:0)
使用CSS。你也可以隐藏第二个孩子的app_label。
.breadcrumbs>ul li:nth-child(2),
#grp-breadcrumbs>ul li:nth-child(2) {
display:none;
}
答案 2 :(得分:0)
避免递归问题:
安装django-apptemplates
pip install django-apptemplates
将模板加载器添加到settings.py中。如果您使用的是Django&gt; = 1.8,请将其添加到TEMPLATES设置(more details in the doc)。
您现在可以通过在extends标记中添加app_name:
来覆盖模板:
{% extends "admin:admin/change_form.html" %}
{% block breadcrumbs %}
{% endblock %}