Python 如何在Django管理中删除面包屑

Python 如何在Django管理中删除面包屑,python,django,Python,Django,如何在django管理应用程序中使用导航全局导航和隐藏面包屑。我已经找到了这样做的方法,但它们看起来很老套,而且有问题。我正在寻找一个干净可靠的解决方案 不起作用的天真方法: 自定义管理员/base_site.html {% extends "admin/base.html" %} {% load i18n %} {% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %} {% block bran

如何在django管理应用程序中使用导航全局导航和隐藏面包屑。我已经找到了这样做的方法,但它们看起来很老套,而且有问题。我正在寻找一个干净可靠的解决方案

不起作用的天真方法:

自定义管理员/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 %}
解决方案2:覆盖base.html


重写base.html并删除breadcrumbs块。孩子们将尝试定义它,但它从不存在,因此它永远不会被渲染。这看起来也像是一个黑客。覆盖base.html也不是一个好主意,因为每个Django版本都可以对base.html进行许多更改,并且管理员应用程序可能会在两个版本之间中断。

扩展所有要呈现空面包屑块的模板。您的第一次尝试(您说不起作用)将起作用,只需扩展其他模板即可。如change_list.html:

{% extends "admin/change_list.html" %}
{% block breadcrumbs %}
{% endblock %}
更改\u form.html:

{% extends "admin/change_form.html" %}
{% block breadcrumbs %}
{% endblock %}
同样适用于:

  • 500.html
  • app_index.html
  • 更改密码.html
  • 删除_confirmation.html
  • 删除所选内容。\u confirmation.html
  • 无效的\u setup.html
  • object_history.html
login.html和index.html有一个空的面包屑块


缺点是每个应用程序都需要应用模板。这意味着重复的模板。如果你想在整个项目范围内使用单个模板,那么你最终会遇到其他问题:复制完整的原始模板,或者让模板扩展
/path/to/site packages/django/contrib/admin/templates/template_name.html
使用CSS。您还可以隐藏第二个子应用程序标签

.breadcrumbs>ul li:nth-child(2),
#grp-breadcrumbs>ul li:nth-child(2) {
    display:none;
}

要避免递归问题,请执行以下操作:

  • 安装django apptemplates

    pip install django-apptemplates
    
  • 将模板加载器添加到settings.py。如果您使用的是Django>=1.8,请将其添加到模板设置()中

  • 现在,您可以通过在extends标记中添加
    app\u name:
    来覆盖模板:

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

  • 这不管用。试试看。您将得到一个最大递归深度超出错误。因为admin/change\u list.html正在尝试扩展admin/change\u list.html。您还错过了一些模板。总共有11个必须被覆盖。它们是:500.html app_index.html auth/user/change_password.html change_form.html change_list.html delete_confirmation.html delete_selected_confirmation.html index.html无效_setup.html login.html object_history.html使用change_form将其删除。它起作用了。该模板位于应用程序文件夹中。我猜你想让模板活得更高,所以它们是项目范围内的。我可以想象Django的跑步圈,但这在(2009年)之前是可能的:幻灯片36。从那以后发生了什么变化?模板加载器?没错。如果你为每个应用程序都这么做,它就会起作用。尽管如此,这将是大量的重复,因为它不是在项目级别的一个地方。
    {% extends "admin:admin/change_form.html" %}
    {% block breadcrumbs %}
    {% endblock %}