反向解析理解

反向解析在路由中先定义好  url(r"book/edit/", views.book_edit, name="book_edit") 起一个别名,

然后在页面中{%url "book_edit"%} 

在页面代码执行的时候 会对这个{%url "book_edit"%}  在路由中进行匹配,

这时是可以匹配到的,

 

但是在url(r"book/edit/(?p<edit_id>(\d+))", views.book_edit, name="book_edit")加上了一个正则参数的话

在页面中{%url "book_edit"%} 的匹配不到的,还是因为它要去路由中去找 有没有和这个反向匹配的,发现没有就报错 

Reverse for 'book_edit' with no arguments not found. 1 pattern(s) tried: ['book/edit/(?P<edit_id>\\d+)/']   

未找到任何参数的“book_edit”反向。 尝试了 1 种模式:['book/edit/(?P<edit_id>\\d+)/'] 

于是在页面中需要添加 {%url "book_edit" edit_id=id%}   给它添加一个位置参数,这样就跟路由中的匹配到了

当在table的时候 这样就会将 当前的id保存下来,url=/book_edit/1    当点击编辑的时候 就会到url=/book_edit/1的路由中,url(r"book/edit/", views.book_edit, name="book_edit") 

 

在后端的反向

url(r'^haha/', views.haha, name="hahaha"),
url(r'^hehehaha/(\d+)/', views.hehe, name="hehehe")
def haha(request):
if request.method == 'GET':
ret = reverse('hehehe',args=((1,)))#在这里就解析 得到/hehe/1
return redirect(ret)


def hehe(request,id):
return render(request,"haha.html",locals())
在后端使用reverse 同样也是到路由中去匹配 有没有对应的路由,没有还是会报 Reverse for 'hehehe' with no arguments not found. 1 pattern(s) tried: ['hehehaha/(\\d+)/']
这里的好处就是只需要改路由的url 页面上的不用修改,



上一篇:借助wsgiref模块的简易版web框架


下一篇:线性时不变系统可观 (observable) 与可检 (detectable) 的等价命题证明