一个请求 /articles/2005/03/ 会匹配上面列表中的第三条. Django 会调用函数 views.month_archive(request, '2005', '03').
/articles/2005/3/ 不会匹配上面列表中的任何条目, 因为第三条的月份需要二位数字.
/articles/2003/ 会匹配上第一条而不是第二条,因为匹配是按照从上到下顺序而进行的, Django 会调用函数
views.special_case_2003(request)
/articles/2003 不会匹配上面列表中的任何条目, 因为每个URL应该以 / 结尾.
/articles/2003/03/03/ 会匹配上最后一条. Django 会调用函数 views.article_detail(request, '2003', '03', '03').
2. 命名组(Named groups)
在上面的简单例子中,并没有使用正则表达式分组,在更高级的用法中,很有可能使用正则分组来匹配URL并且将分组值通过
参数传递给view函数。
在Python的正则表达式中,分组的语法是 (?Ppattern), name表示分组名,pattern表示一些匹配正则.
这里是一个简单的小例子:
For example:
A request to /articles/2005/03/ 会调用函数 views.month_archive(request, year='2005',month='03'), 而不是
views.month_archive(request, '2005', '03').
A request to /articles/2003/03/03/ 会调用函数 views.article_detail(request, year='2003',month='03', day='03').
常见写法实例:
3. 二级路由(Including)
那如果映射 url 太多怎么办,全写一个在 urlpatterns 显得繁琐,so 二级路由应用而生
在上面这个例子中,如果请求url为 /credit/reports/ 则会调用函数 credit_views.report().
使用二级路由也可以减少代码冗余,使代码更加简洁易懂
4. 添加额外的参数
URLconfs 有一个钩子可以让你加入一些额外的参数到view函数中.
在上面的例子中,如果一个请求为 /blog/2005/, Django 将会调用函数l views.year_archive(request, year='2005',foo='bar').
需要注意的是,当你加上参数时,对应函数views.year_archive必须加上一个参数,参数名也必须命名为 foo,如下:
5. 别名的使用
url中还支持name参数的配置,如果配置了name属性,在模板的文件中就可以使用name值来代替相应的url值.
我们来看一个例子: