You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取Django项目的全部API URL(含路由注册URL)

获取Django项目中所有完整API路径的方法

下面提供两种实用方案,帮你提取项目中所有API的完整路径——包括直接在urlpatterns里定义的,以及通过rest_framework_extensions路由器注册的路径,同时自动替换路径中的占位符(如pk)为示例值。

方法一:通过Django Shell手动查询

  1. 启动Django shell:
python manage.py shell
  1. 导入模块并遍历URL:
from django.urls import get_resolver, reverse

resolver = get_resolver()
full_urls = []

for pattern in resolver.url_patterns:
    if pattern.name:
        try:
            # 带pk参数的URL传入示例值1
            if '<pk>' in pattern.pattern.regex.pattern:
                url = reverse(pattern.name, kwargs={'pk': 1})
            else:
                url = reverse(pattern.name)
            full_urls.append(url)
        except:
            # 无法反向解析时手动处理路径
            path = pattern.pattern.regex.pattern.replace('^', '').replace('$', '')
            path = path.replace('(?P<pk>\\d+)', '1')
            full_urls.append(path)

# 打印结果
for url in full_urls:
    print(url)

方法二:编写脚本自动生成完整路径

如果需要批量处理或集成到项目流程中,可以写一个专用函数,同时兼容路由器注册的URL:

from django.urls import get_resolver, reverse
# 导入你的路由器实例
from your_project.urls import router_something

def get_all_full_api_urls():
    full_urls = []
    resolver = get_resolver()

    # 处理urlpatterns中的路径
    for pattern in resolver.url_patterns:
        if pattern.name:
            try:
                if '<pk>' in pattern.pattern.regex.pattern:
                    url = reverse(pattern.name, kwargs={'pk': 1})
                else:
                    url = reverse(pattern.name)
                full_urls.append(url)
            except:
                path = pattern.pattern.regex.pattern.replace('^', '').replace('$', '')
                path = path.replace('(?P<pk>\\d+)', '1')
                full_urls.append(path)

    # 处理路由器注册的路径
    for route in router_something.urls:
        path = route.pattern.regex.pattern.replace('^', '').replace('$', '')
        path = path.replace('(?P<pk>\\d+)', '1')
        full_urls.append(f"something/{path}")

    return full_urls

# 调用并打印所有完整路径
if __name__ == "__main__":
    urls = get_all_full_api_urls()
    for idx, url in enumerate(urls, 1):
        print(f"{idx}. {url}")

扩展说明

  • 若路径中有其他占位符(如slug),可添加替换规则,比如path = path.replace('(?P<slug>[^/]+)', 'example-slug')
  • 脚本执行前需确保加载Django环境,可通过python manage.py runscript your_script_name(需安装django-extensions)或在项目根目录直接运行脚本。

内容的提问来源于stack exchange,提问作者Abinash Biswal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:20:25