django-路由命名与reverse反解析(逆向)
路由命名
在定义路由的时候可以为路由命名,方便查找特定视图的具体路径信息。
1)使用include函数定义路由时,可以使用namespace参数定义路由的命名空间
url(r'^',include('book.urls',namespace='book'))
命名空间表示,凡是book.urls中定义的路由,均属于namespace指明的book名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2)定义普通路由时,可以使用name参数指明路由的名字
url(r'^booklist/$',bookList,name='index')
reverse反解析
使用reverse函数,可以根据路由名称,返回具体的路径
格式:reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
viewname可以是URL pattern name或可调用视图对象。
from news import views url(r'^archive/$', views.archive, name='news-archive') #可以使用以下两个方法来反转URL # using the named URL reverse('news-archive') # passing a callable object # (This is discouraged because you can't reverse namespaced views this way.) from news import views reverse(views.archive)
如果需要在url中加入参数可以在args中传递参数
from django.urls import reverse def myview(request): return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
也可以在kwagrs传参数
>>> reverse('admin:app_list', kwargs={'app_label': 'auth'}) '/admin/auth/'
注意:
args
和kwargs
不能同时传递到reverse()
。- 如果不能匹配成功,reverse()会引发NoReverseMatch异常。
urlconf
参数是包含用于反转的URL模式的URLconf模块。 默认情况下,使用当前线程的根URLconf。