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

如何在Django中配置panel模块的多级嵌套子路由

Django面板模块嵌套路由配置方案

要实现site.com/panel/user/id/profile、site.com/panel/admin/id/addItem这类分层路由,核心是用Django的include()方法做路由层级拆分,不要把所有路由平铺在同一个路由列表里。

原有配置的问题

  • URL路径里写了user dashboard这类带空格的字段,不符合URL规范,访问时会被转义,极易出错
  • 子路由没有挂载到user、admin的分组前缀下,也没有绑定ID路径参数
  • 代码漏导入了adminPanel视图和路由嵌套需要的include方法

配置步骤

1. 根路由(ecoverde/urls.py)无需修改

原有根路由逻辑是正确的,已经把/panel/前缀的请求转发到panel应用的路由文件,保留原有代码即可:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('base.urls')),
    path('panel/', include('panel.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 重写panel应用路由(ecoverde/panel/urls.py)

把user、admin两个分组的子路由单独定义,再通过include()挂载到对应前缀下,父级路径定义的<str:pk>参数会自动传递给所有子路由的视图函数:

from django.urls import path, include
# 导入所有需要用到的视图,记得补全你自己的子页面视图
from .views import userPanel, adminPanel, Compare, saves, profile, addItem

# 用户端子路由,自动继承前缀 /panel/user/<str:pk>/
user_panel_routes = [
    path('', userPanel, name='userPanel'), # 对应用户面板首页 /panel/user/<pk>/
    path('profile/', profile, name='userProfile'), # 对应需求路径 /panel/user/<pk>/profile
    path('compare/', Compare, name='compare'),
    path('saves/', saves, name='saves'),
    # 后续新增用户端子路由直接加在这个列表里即可
]

# 管理员端子路由,自动继承前缀 /panel/admin/<str:pk>/
admin_panel_routes = [
    path('', adminPanel, name='adminPanel'), # 对应管理员面板首页 /panel/admin/<pk>/
    path('addItem/', addItem, name='adminAddItem'), # 对应需求路径 /panel/admin/<pk>/addItem
    # 后续新增管理员端子路由直接加在这个列表里即可
]

urlpatterns = [
    path('user/<str:pk>/', include(user_panel_routes)),
    path('admin/<str:pk>/', include(admin_panel_routes)),
]

配置注意事项

  • 所有路径末尾统一加斜杠,匹配Django默认的APPEND_SLASH规则,避免不必要的301跳转
  • 子路由绑定的视图函数必须接收父级传递的pk参数,例如profile视图的定义格式为def profile(request, pk):,否则会报参数不匹配错误
  • 如果后续子路由数量过多,可以把user_panel_routes、admin_panel_routes拆成单独的路由文件(比如panel/urls_user.py、panel/urls_admin.py),挂载时直接写path('user/<str:pk>/', include('panel.urls_user'))即可,逻辑完全一致
  • 模板里反向解析路由时,直接传入pk参数即可,例如{% url 'userProfile' pk=request.user.id %}会自动生成正确的访问路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:45:47