我想做类似于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)
这似乎是一种代码气味,至少有两个原因:
我要覆盖changelist_view()
来呈现自己的报告模板,该模板不是“更改列表”。
即使报表不依赖于一个模型也不依赖于多个模型,它也需要代理模型。
有更好的方法吗?
答案 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将这些项目添加到上下文中。