将菜单项添加到Django管理站点

时间:2019-02-08 23:08:22

标签: python django django-templates django-views

我想做类似于How to add report section to the Django admin?的事情,它解释了如何为管理站点注册自定义端点。如果以这种方式注册URL,如何添加指向该视图的链接?到目前为止,我发现的唯一方法是这样的:

class CustomAdmin(admin.ModelAdmin):
    def changelist_view(self, request, extra_context=None):
        return render(request, 'my_page.html')


class ProxyModel(models.MyModel):
    class Meta:
        verbose_name = 'Report'
        verbose_name_plural = 'Report'
        proxy = True

admin.site.register(ProxyModel, CustomAdmin)

这似乎是一种代码气味,至少有两个原因:

  1. 我要覆盖changelist_view()来呈现自己的报告模板,该模板不是“更改列表”。

  2. 即使报表不依赖于一个模型也不依赖于多个模型,它也需要代理模型。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

重写基本管理模板,以便为自定义菜单添加一个部分,那么您应该能够在其中使用{% url ... %}标签,以指向您的视图。

请参阅:Overriding admin templates

您甚至可以为这些菜单项建立一个名为AdminMenuItems的模型。

class AdminMenuItems(models.Model):
    title = models.CharField(max_length=255)
    # The name of your url according your urls conf.
    url_name = models.CharField(max_length=255)

然后在您的自定义管理模板中,它可能类似于:

<ul>
{% for item in menu_intems %}
    <li><a href="{% url item.url_name %}">item.title</a></li>
{% endfor %}
</ul>

您可以通过context processor将这些项目添加到上下文中。