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

Django urls.py触发RecursionError:递归深度超限问题求助

Django URL路由递归错误排查与解决

我配置URL路由指向应用内的urls.py时,反复出现RecursionError。根urls.py代码如下:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('shop/', include('ptr.urls'))
]

完整报错回溯信息(翻译后):

Traceback (最近的调用最后):
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
    self.check(display_num_errors=True)
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 475, in check
    all_issues = checks.run_checks(
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 42, in check_url_namespaces_unique
    all_namespaces = _load_all_namespaces(resolver)
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 72, in _load_all_namespaces
    namespaces.extend(_load_all_namespaces(pattern, current))
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 72, in _load_all_namespaces
    namespaces.extend(_load_all_namespaces(pattern, current))
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 72, in _load_all_namespaces
    namespaces.extend(_load_all_namespaces(pattern, current))
  [上述行重复987次]
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 62, in _load_all_namespaces
    namespaces = [
  文件 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/checks/urls.py", line 65, in <列表推导式>
    if getattr(url, "namespace", None) is not None
RecursionError: 调用Python对象时超出最大递归深度

问题原因

这种递归错误的核心原因是应用内的ptr/urls.py存在循环引用:要么反向引入了根urls.py,要么通过include('ptr.urls')重复引入自身,导致Django在解析路由规则时陷入无限递归。

解决步骤

  1. 打开ptr/urls.py,检查是否存在以下情况:
    • 包含include('项目根目录.urls')这类引用根路由的代码
    • 包含include('ptr.urls')这种引入自身路由文件的代码
  2. 删除或修正上述循环引用的路由配置。应用内的urls.py应只定义当前应用的具体路由规则,示例如下:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='shop_index'),
    # 其他应用专属的路由规则...
]
  1. 保存修改后重启Django开发服务器,递归错误即可解决。

内容的提问来源于stack exchange,提问作者William Zeng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:37:26