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/'

注意:

  • argskwargs不能同时传递到reverse()
  • 如果不能匹配成功,reverse()会引发NoReverseMatch异常。
  • urlconf参数是包含用于反转的URL模式的URLconf模块。 默认情况下,使用当前线程的根URLconf。
posted @ 2021-04-04 16:18  EF果果  阅读(240)  评论(0编辑  收藏  举报