如何删除Django管理中的面包屑

2024-05-16 12:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用navglobal导航并隐藏django管理应用程序中的breadcrumb。我已经找到了一些方法,但它们看起来既老套又有问题。我在找一个干净可靠的解决方案。在

不起作用的天真方法:

自定义管理员/基地_网站.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 %}

这不起作用,因为django管理中的模板喜欢更改_列表.html延伸基地_网站.html将为breadcrumbs定义内容,它将覆盖我在base中设置的任何内容_网站.html. 在

解决方案1:CSS

使用extrastyle块向admin添加以下css。这是可行的,但是面包屑仍然会生成并出现在HTML源代码中。这让人觉得恶心。在

^{pr2}$

解决方案2:覆盖基本.html

覆盖基本.html移除面包屑块。孩子们会尝试定义它,但它从未存在过,所以它永远不会被渲染。这看起来也像是黑客攻击。这也不是个好主意基本.html因为每个Django版本都可以对基本.html管理应用程序可能会在发布之间中断。在


Tags: django方法transbaseadmintitle网站html
3条回答

扩展要呈现空面包屑块的所有模板。你的第一次尝试(你说不起作用)会起作用的,只需扩展其他模板。喜欢变化_列表.html公司名称:

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

改变_表单.html公司名称:

^{pr2}$

同样适用于:

  • 500.html
  • 应用程序_索引.html在
  • 改变_密码.html在
  • 删除_确认.html在
  • 删除选定项_确认.html在
  • 无效_安装程序.html在
  • 对象_历史记录.html在

在登录.html以及索引.html有一个空的面包屑块。在

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

使用CSS。您也可以隐藏app_标签,它是第二个子项。在

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

要避免递归问题:

  1. 安装django apptemplates

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

  3. 现在可以通过在extends标记中添加app_name:来重写模板:

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

相关问题 更多 >