如何在Django中列出urlpatterns(端点)?

231

我该如何查看“reverse”正在查找的当前urlpatterns?

我在视图中调用带有参数的反向函数,但是它却不能正常工作。有没有办法检查哪些内容存在以及为什么我的模式不起作用?


https://dev59.com/MnI-5IYBdhLWcg3wfoa1 - pmav99
2
打开DEBUG模式并查看调试输出中的URL列表? - boatcoder
21个回答

0
在我的情况下,我想要列出API端点,而不必基本上重写我的urlpatterns。您无法将urlpatterns导入视图,因为它会导致循环导入。因此,这里有一个非常好的解决方案,使用django.urls中的include函数。这允许您在项目中列出任何一组urlpatterns。
from django.views.generic import TemplateView
from rest_framework.response import Response
from rest_framework.routers import APIRootView
from rest_framework.schemas import get_schema_view
from django.urls import include
import re

# Create your views here.
class ApiRoot(APIRootView):

    def get(self, request, *args, **kwargs):
        urls = include('api.urls')[0].urlpatterns
        response = {}
        for url in urls:
            match = re.search(r'[\w\/\-]+', str(url.pattern))
            if not match:
                continue
            name = match.group()
            response[name] = request.build_absolute_uri(name)
        return Response(response)

在此输入图像描述 复制并粘贴这段代码,然后进行一些修正。这是一个有效的临时解决方案,对我来说非常好用。


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