Django URLconf,路由命名與reverse反解析(逆向)

URLconf

  • 瀏覽者通過在瀏覽器的地址欄中輸入網址請求網站

  • 對於Django開發的網站,由哪一個視圖進行處理請求,是由url匹配找到的

配置URLconf

  1. settings.py中

    指定url配置

    ROOT_URLCONF = '項目.urls'
    
  2. 項目中urls.py

    匹配成功後,包含到應用的urls.py

    url(正則, include('應用.urls'))
    
  3. 應用中urls.py

    匹配成功後,調用views.py對應的函數

    url(正則, views.函數名)
    
  4. 提示

    1. 正則部分推薦使用 r,表示字符串不轉義,這樣在正則
    表達式中使用 \ 只寫一個就可以
    
    2. 不能在開始加反斜槓,推薦在結束加反斜槓
        正確:path/
        正確:path
        錯誤:/path
        錯誤:/path/
    
    3. 請求的url被看做是一個普通的python字符串,進行匹配時不包括域名、get或post參數
        3.1 如請求地址如下:
            http://127.0.0.1:8000/18/?a=10
        3.2 去掉域名和參數部分後,只剩下如下部分與正則匹配
            18/
    

路由命名與reverse反解析(逆向)

1. 路由命名

在定義路由的時候,可以爲路由命名,方便查找特定視圖的具體路徑信息。

  • 在使用include函數定義路由時,可以使用namespace參數定義路由的命名空間,如

    url(r'^',include('book.urls',namespace='book'))
    

    命名空間表示,凡是book.urls中定義的路由,均屬於namespace指明的book名下。命名空間的作用:避免不同應用中的路由使用了相同的名字發生衝突,使用命名空間區別開。

  • 在定義普通路由時,可以使用name參數指明路由的名字,如

    urlpatterns = [
        url(r'^$',index),
        # 匹配書籍列表信息的URL,調用對應的bookList視圖
        url(r'^booklist/$',bookList,name='index'),
        url(r'^testproject/$',views.testproject,name='test'),
    ]
    

2. reverse反解析

使用reverse函數,可以根據路由名稱,返回具體的路徑,如:

from django.core.urlresolvers import reverse
#或者
from django.urls import reverse

def testproject(request):

    return HttpResponse("OK")

# 定義視圖:提供書籍列表信息
def bookList(request):

    url = reverse('book:test')
    print(url)
    return HttpResponse('index')

  • 對於未指明namespace的,reverse(路由name)

  • 對於指明namespace的,reverse(命名空間namespace:路由name)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章