
Django URL路由完全指南dj4e-samples route示例掌握命名空间与reverse【免费下载链接】dj4e-samplesDjango For Everybody Sample Code项目地址: https://gitcode.com/gh_mirrors/dj/dj4e-samplesdj4e-samplesDjango For Everybody Sample Code是一套完整的 Django 5.2 示例代码集其中的route示例专门用来攻克 Django URL 路由的三大核心能力URL 路由routing、命名空间namespace与反向解析reverse。这篇文章就用这个最小示例帮你在 10 分钟内彻底掌握 Django URL 路由机制告别硬编码路径。为什么 Django URL 路由不该硬编码 新手写 Django 时最容易踩的坑就是在模板里直接写死a href/route/second。route示例的第一页 route/templates/route/main.html 就特意把这种反模式列出来并标注了(not DRY)——一旦以后调整 URL 结构所有硬编码的链接全部失效。对比一下两种做法做法写法问题硬编码路径href/route/secondURL 一改链接全断Django{% url %}标签{% url route:second-view %}Django 自动反向解析永不失配核心思想给每个路由起一个名字以后只按名字引用让 Django 负责算出真实路径。route 示例速览path 与 app_name 一览 route示例的核心就是 route/urls.py 中的几行配置app_name route urlpatterns [ path(, TemplateView.as_view(template_nameroute/main.html)), path(first, views.FirstView.as_view(), namefirst-view), path(second, views.SecondView.as_view(), namesecond-view), ]路径片段视图路由名称nameTemplateView无名firstFirstViewfirst-viewsecondSecondViewsecond-view两个关键细节name是反向解析的钥匙只有定义了name的路由才能被{% url %}和reverse()按名字找到app_name route这一行把本应用内所有路由名称圈进了route这个命名空间模板中写作route:second-view。命名空间完全教程app_name 与 namespace 的区别 这是 Django URL 路由中最容易混淆的概念route示例把它们同时展示了出来。第一层应用级命名空间app_name。在应用自己的urls.py里声明app_name route作用是把路由名称关在本应用内——否则多个应用里都叫home的路由会互相冲突route/urls.py 中的注释原话就是Otherwise the name values will be global across all applications。第二层实例级命名空间namespace。项目级的 dj4e-samples/urls.py 挂载 route 时额外传了一个namespace参数path(route/, include(route.urls, namespacensroute)),于是同一个路由就有了双名{% url route:second-view %}—— 使用 app_name{% url nsroute:second-view %}—— 使用实例命名空间。实例命名空间的价值在于同一个应用可以被挂载到项目的不同前缀下每个挂载点拥有独立的命名空间互不干扰。route/templates/route/main.html 页面同时演示了route:和nsroute:两种写法运行后一眼就能看出区别。用 reverse 函数反向解析 URL 模板里有{% url %}标签那Python 代码里怎么按名字生成 URL答案就是django.urls.reverse。route/views.py 中的SecondView给出了标准示范from django.urls import reverse u reverse(gview:cats) # → /gview/cats u2 reverse(gview:dogs) # → /gview/dogs u3 reverse(gview:dog, args[42]) # → /gview/dog/42这里引用的是另一个示例应用gview的路由注意两点带参数的路由必须传argsgview:dog对应dog/int:pk不传args会直接抛出NoReverseMatch异常命名约定值得抄作业gview/urls.py 中列表视图用复数cats、dogs、详情视图用单数cat、dog一眼就能分清路由用途。Django 模板 url 标签的 5 种用法 ✅{% url %}模板标签是路由反解析最顺手的工具。route/templates/route/main.html 一页就列齐了 5 种场景模板写法说明href/route/second❌ 硬编码反面教材{% url route:first-view %}本应用路由用 app_name{% url gview:cats %}跨应用路由{% url gview:cat 42 %}带路径参数的路由参数直接写在标签里{% url nsroute:second-view %}用实例命名空间注意第三种跨应用引用时只要目标应用声明了app_name如 gview/urls.py 中的app_name gview你这边什么都不用配。URL 命名空间 5 大常见错误清单 ⚠️忘了写app_name多应用项目里名称冲突{% url %}报NoReverseMatch路由没给namepath()不传name参数就无法反向解析带参数路由 reverse 漏传 args立即抛异常检查args/kwargs是否与路径参数对应混淆 app_name 与 namespace前者在应用urls.py里声明后者在include()时传入名字可以不同改了 URL 前缀忘了全局搜索坚持只按名字引用的习惯这类事故基本绝迹。相关文件资料 想亲手跑一遍这个示例重点阅读以下文件即可route/urls.py —— 路由定义与 app_name 声明route/views.py —— 类视图与reverse()反向解析示范dj4e-samples/urls.py —— 项目级挂载与实例命名空间nsroutegview/urls.py —— 被跨应用 reverse 引用的路由单复数命名约定route/templates/route/main.html ——{% url %}标签 5 种用法演示页route/templates/route/second.html —— Pythonreverse()结果的渲染页掌握命名路由 → 命名空间 → 反向解析这条主线后Django URL 路由就不再神秘——route示例把这条主线浓缩在了不到 20 行代码里值得逐行读懂。【免费下载链接】dj4e-samplesDjango For Everybody Sample Code项目地址: https://gitcode.com/gh_mirrors/dj/dj4e-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考