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

如何梳理Django项目URL?解决{% url %}反向解析路径异常问题

Django URL反向解析异常问题解决

我是Django初学者,跟着YouTube视频和Django文档创建了项目和signin应用,制作了登录、注册、商家注册的HTML页面。

现有代码配置

project/urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls), #website.com/admin/
    path('', include('signin.urls')), #website.com/
    path('home/', include('signin.urls')), #website.com/home/
    path('signin/', include('signin.urls')), #website.com/signin/
    path('signup/', include('signin.urls')), #website.com/signup/
    path('business_signup/', include('signin.urls')), #website.com/business_signup/
]

signin/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.default, name='signin'), 
    path('home/', views.default, name='home'),
    path('signin/', views.default, name='signin'),
    path('signup/', views.signup, name='signup'),
    path('business_signup/', views.business_signup, name='business_signup'),
]

signin/views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def default(request):
    return render(request, "default.htm")

问题现象

HTML页面中使用硬编码路径<p>New here? <a href="/signup">Create an account</a></p>时,所有URL均可正常跳转;但使用Django模板URL标签<p>New here? <a href="{% url 'signup' %}">Create an account</a></p>时,生成的跳转路径变成http://127.0.0.1:8000/business_signup/signin/、http://127.0.0.1:8000/business_signup/signup/这类嵌套异常路径,期望生成http://127.0.0.1:8000/signin/这类根路径下的URL。

解决方法

1. 重构项目URL配置,避免重复挂载应用URL

当前project/urls.py多次将signin.urls挂载到不同根路径,导致Django反向解析时匹配混乱——同一个命名URL会对应多个挂载路径,模板解析时会优先匹配最后一次挂载的路径(如/business_signup/),进而拼接出嵌套路径。

修改project/urls.py,仅保留一次应用URL挂载:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    # 仅挂载一次,应用内URL自动拼接在根路径后
    path('', include('signin.urls')),
]

2. 调整应用内URL配置,保证命名唯一、路径清晰

当前signin/urls.py存在重复的name='signin',会引发反向解析冲突,同时调整路径定义:

from django.urls import path
from . import views

urlpatterns = [
    # 空路径跳转至登录页
    path('', views.default, name='home'),
    # 登录页独立路径
    path('signin/', views.default, name='signin'),
    # 普通用户注册路径
    path('signup/', views.signup, name='signup'),
    # 商家注册路径
    path('business_signup/', views.business_signup, name='business_signup'),
]

3. 模板中正常使用URL标签

修改配置后,模板中的{% url 'signup' %}会正确解析为/signup/,{% url 'signin' %}解析为/signin/,符合根路径跳转需求。


内容的提问来源于stack exchange,提问作者Dibya Prakash Dash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:48:31