Django: 路由与视图 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

概念与用例

容易理解,路由表的核心用处在于路由查找:根据用户请求的URL,找到匹配的视图函数

url-match

不过有时候,我们也需要为视图函数生成对应的URL,这被称为URL的反向解析

不过这有什么用呢,有什么用呢,什么用呢,么用呢,用呢,呢......

让我们看一个假想的案例。


假设你在负责一个信息系统的报表子系统的开发,而邮箱子系统是另外一个同事开发的,这两个 子系统的路由表,以及你的报表子系统的功能首页视图如下:

reverse-ucase

项目经理在将这些子系统部署到具体项目时,会分别挂接在不同的URL路径下。例如,将你 的报表子系统挂在/report/下,而将邮箱子系统挂在/email/下,这时,整个系统的URL 看起来是这样:

reverse-ucase2

现在的问题来了:如果需要在你的报表子系统的首页,给用户提供到其收/发件箱的链接, 该怎么做?

看起来可能很简单,修改一下你的首页视图,加上邮箱的链接:

def v_index(req):
Body = '''
        <h1>统计报表</h1>
        <ul>
            <li><a href="income/2012/">2012年度收入报表</a></li>
            <li><a href="income/2012/12/">2012-12月度收入报表</a></li>
            <li><a href="/email/inbox/">收件箱</a></li>
            <li><a href="/email/outbox/">发件箱</a></li>            
        </ul>    
'''
return HttpResponse(body)

如果邮箱子系统的挂接URL保持/email/不变,也算说的过去。不过如果下次报表系统被挂接到另 一个URL下面 —— 比如/mailbox/ , 又怎么办?

很显然,单纯地宅在你的报表子系统里面,没法找到一个万全的方案写出永远正确的邮箱 链接 —— 因为有个关键的信息在你的报表子系统外部:邮箱子系统的挂节点。

然而,在Django的根路由表里却恰好有这个信息。

修改示例代码,

1. 将根路由表urlpatterns中的第三项URL模式改为^xmail/

2. 运行代码,在首页点击链接"查看报表",进入报表子系统

3. 在报表子系统,点击链接"收件箱",为什么会出错?应该如何解决?