Django: 路由与视图 互动版

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

路由表

基本上,在任何路由系统中,核心的数据结构就是路由表,这在Django中也不例外。 Django中的路由表记录了从一个节点(URL)到另一个节点(视图函数)的寻径方案:

router

在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. 将这个路由项添加到路由表中