【问题标题】:How do you add a new entry into the django admin index?如何在 django 管理索引中添加新条目?
【发布时间】:2012-02-17 00:20:20
【问题描述】:

我正在处理一个 Django 项目,并且我使用 get_urls override method described in the documentation 创建了一些自定义管理视图。它完美地工作。只有一个问题。除非您已经知道 URL,否则无法访问此自定义管理视图。

我已经知道有一些方法可以在管理员的某处添加指向此视图的链接,但没有一种方法令人满意。我希望所有模型管理员都可以在模型列表中显示自定义视图的链接。我只是不希望它旁边有 +add 或 +change 链接,因为它不是模型。

我可以直接覆盖 admin_site 或模板,但这并不好。它将定制放在项目级别而不是应用程序级别。它也只会将链接放在 /admin/ 页面上,而不是 /admin/myapp/ 页面上。

我也可以通过覆盖 app_index.html 模板轻松地将链接添加到不同的位置,但这并不是一个方便或直观的查找位置。

我想出的另一个解决方案是创建一个空白模型并为其注册一个空白管理员。然后窃取该模型的 url 模式,因此单击其条目会转到我的自定义视图,而不是空白的添加/更改视图。这行得通,但它是一个非常丑陋的 hack。

这是我正在努力实现的目标的图片。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您是否尝试过这个应用程序:https://github.com/jsocol/django-adminplus?即使它不能达到你想要达到的确切目的,至少它可以通过查看代码给你一些启发

    【讨论】:

    • 起初这看起来很有希望,但你可以清楚地看到这个截图,它并没有达到我想要的效果。 i.imgur.com/UmODn.png
    【解决方案2】:

    我仍然认为这样做的正确方法是覆盖 django 管理模板的某些部分。没有简单的方法可以添加这些链接。

    https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

    我还发现了这篇文章http://coffeeonthekeyboard.com/o-hai-django-adminplus-568/,这也表明 django-adminplus 是一个很好的工具。就我个人而言,我更愿意避免任何额外的依赖,并且仍然会使用模板 - 但这取决于你。

    【讨论】:

    • 我已经知道如何覆盖模板。我所知道的应用程序级别的人都不会将链接放在那个地方。
    • 实际上,如果您正确编辑模板,那么您可以将任何内容放在任何地方。只需使用 if 语句检查模板中正确的应用程序名称即可。 github.com/django/django/blob/master/django/contrib/admin/… 这是索引模板,它有一个 for 循环:{% for app in app_list %} 所以你检查正确的应用程序,如果正确,然后在最后一个循环之后插入你的链接。这是可行的,但不是那么好看。
    【解决方案3】:

    您需要override the template admin/index.html。然后在{% endfor %} on line 40之后添加一对新标签。

    你也可以使用 jQuery 来解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-15
      • 2019-01-16
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多