如何在Django admin中删除面包屑

时间:2014-03-12 08:13:05

标签: python django

如何使用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进行许多更改,而管理应用程序可能会在各版本之间中断。

3 个答案:

答案 0 :(得分:2)

扩展要渲染空面包屑块的所有模板。您的第一次尝试(您说没有工作)将起作用,也可以扩展其他模板。像change_list.html:

{% extends "admin/change_list.html" %}
{% block breadcrumbs %}
{% endblock %}

change_form.html:

{% extends "admin/change_form.html" %}
{% block breadcrumbs %}
{% endblock %}

同样的:

  • 500.html
  • app_index.html
  • change_password.html
  • delete_confirmation.html
  • delete_selected_confirmation.html
  • invalid_setup.html
  • object_history.html

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)

避免递归问题:

  1. 安装django-apptemplates

    pip install django-apptemplates
    
  2. 将模板加载器添加到settings.py中。如果您使用的是Django&gt; = 1.8,请将其添加到TEMPLATES设置(more details in the doc)。

  3. 您现在可以通过在extends标记中添加app_name:来覆盖模板:

    {% extends "admin:admin/change_form.html" %}
    {% block breadcrumbs %}
    {% endblock %}