在Django管理界面中添加菜单项

4

我希望做类似于如何向Django管理后台添加报告部分的事情,该问题解释了如何为管理站点注册自定义端点。如果我以这种方式注册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个回答

3
覆盖基本的管理模板以添加自定义菜单部分,然后您应该能够在那里使用 {% url ... %} 标记来指向您的视图。请参见:覆盖管理模板。您甚至可以为这些菜单项创建一个名为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)

然后在您的自定义管理模板中,可以像这样编写代码:
```html

然后在您的自定义管理模板中,可以像这样编写代码:

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

通过上下文处理器,您可以将这些项目添加到上下文中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接