路由表分拆
Django的定位是开发大中型应用程序,因此很合理地,要解决路由表拆分 的问题,比如不同开发组分别承担自己那部分的路由表设计。
例如,信用卡开发组将信用卡部分的路由单独定义在路由表credit_urlpatterns 中,当最终集成各个开发组的路由时,使用include(sub_urlpatterns)方法就可以 把其他路由表引入进来。
路由解析树
你可能注意到,引入子路由表也是使用url()方法,只是第二个参数从视图函数 变更成一个include()调用。事实上url()只是个语法糖,它的作用仅仅是 使路由表看起来更整洁一些。
url()函数自动判断了第二个参数的类型并做出了区别对待。
当使用视图函数作为参数调用url()方法时,创建的是一个RegexPattern对象, 而当使用include()返回值作为参数调用url()方法时,创建的则是一个 RegexResolver对象。
这使得基于根路由表urlpatterns创建的路由解析器看起来像一棵树:
你可以自行脑补一下,对URL/credit/report/的处理,是如何使用这棵树完成的。
修改示例代码:
1. 创建一个新的子路由表mail_urlpatterns,内容自定
2. 将其挂接到根路由表中/mail/前缀下
3. 使用路由解析器测试你创建的子路由