反向解析在路由中先定义好 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 页面上的不用修改,