路由表
基本上,在任何路由系统中,核心的数据结构就是路由表,这在Django中也不例外。 Django中的路由表记录了从一个节点(URL)到另一个节点(视图函数)的寻径方案:
在Django中,包含一个或多个路由项的列表(List)对象,就是一个合法的路由 表。例如下面示例中的urlpatterns变量:
urlpatterns = [
url(r'^$',v_index),
url(r'^news/$',v_news),
]
路由项
路由项记录一个URL正则模式和一个视图函数的对应关系,主要作用是通过用户 请求的URL找到对应的视图函数。
在Django中,使用url(regex,view)函数创建一个RegexURLPattern对象。 参数regex是一个用来匹配URL的正则表达式,而参数view则指向视图函数。
def v_about(req):pass
urlpattern = url(r'^about/$',v_about)
RegexURLPattern对象最重要的方法是resolve(),传入一个URL串,如果可以 和它的模式匹配,将返回一个ResolveMatch对象,否则返回None:
print urlpattern.match('about/')
print urlpattern.match('home/')
匹配结果
匹配结果对象ResolveMatch最重要的属性有三个:
- func - 视图函数
- args - 位置参数列表
- kwargs - 关键字参数字典
由于ResolveMatch重载了__getitem__()方法,因此,我们可以一次提取 这些属性:
view,args,kwargs = urlpattern.match('about/')
print view(None,*args,**kwargs)
修改示例代码:
1. 创建一个视图v_test
2. 创建一个从URL模式^test/$到视图v_test的路由项
3. 将这个路由项添加到路由表中