Django ModelAdmin.get_urls()未注册自定义网址 [英] Django ModelAdmin.get_urls() not registering custom urls

查看:328
本文介绍了Django ModelAdmin.get_urls()未注册自定义网址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Django管理站点中为我的模型创建自定义视图。我为名为 Document 的模型创建了 ModelAdmin ,如下所示:



<从django.http导入pre> 从django.urls导入HttpResponse
从django.urls导入路径
从django.contrib导入admin
从my_app.models导入文档


@ admin.register(Document)
类DocumentAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super()。get_urls( )
custom_urls = [
path('my-view /',self.admin_site.admin_view(self.my_view))
]

返回网址+ custom_urls

def my_view(self,request):
return HttpResponse('test')

根据文档(v2.1),我应该能够通过 / admin / my_app / document / my-view访问 my_view ,但是当我尝试访问此URL dja时ngo将我重定向到管理主页,并显示以下警告:

  ID为 my-view的文档不存在。也许它被删除了? 

所以django似乎看不到我的自定义网址。我想念什么?

解决方案

这只是URL排序的问题;如何解决?通用管理员更改视图将首先处理,并且正在捕获您对我的视图的请求。您可以通过将URL放在第一位来更改此设置,这是您链接到的示例中实际完成的操作:

 返回custom_urls +网址


I am trying to create custom views for my models in Django admin site. I created ModelAdmin for my model named Document like this:

from django.http import HttpResponse
from django.urls import path
from django.contrib import admin
from my_app.models import Document


@admin.register(Document)
class DocumentAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('my-view/', self.admin_site.admin_view(self.my_view))
        ]

        return urls + custom_urls

    def my_view(self, request):
        return HttpResponse('test')

According to the docs (v2.1) I should be able to access my_view with /admin/my_app/document/my-view but when I try to visit this URL django redirects me to admin homepage with the following warning:

Document with ID "my-view" doesn't exist. Perhaps it was deleted?

So it looks like django cannot see my custom url. What am I missing? How can I get this to work?

解决方案

This is just a matter of URL ordering; the generic admin change view is processed first and is capturing your request for "my-view" as a slug. You can change this by putting your URLs first, which is what is actually done in the example you link to:

return custom_urls + urls

这篇关于Django ModelAdmin.get_urls()未注册自定义网址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆