Django url (路由)
阿新 • • 發佈:2019-01-09
**1、路由的基本使用:** #url 是個函式,有四個引數,第一個引數要傳正則表示式,第二個引數傳函式記憶體地址,第三個傳預設引數,第四個傳路由別名 url(r'^yaopipqideneirong/article/aa.html$',views.test), -路由從上往下匹配,一旦匹配成功,後面就不繼續匹配了 **2、路由的無名分組** url(r'test2/(\d+)/(\w+)$',views.test2), 無名分組分出幾個值,試圖函式就要接受幾個值(位置引數形式傳過來的) **3、路由的有名分組(用的比較多)** url(r'^test3/(?P<id>\d+)/(?P<name>\w+)$',views.test3),有名分組分出幾個值,檢視函式就要接受幾個值(按關鍵字傳入,位置可以打亂) **4、有名和無名不能混著用** **5、在settings中配置(以後專案,一般不用動)** 預設是true,瀏覽器瀏覽的時候,預設加上斜槓 如果是false,瀏覽器預設不會加 / APPEND_SLASH=False **6、路由分發** 1、在 主 路由中匯入 include -from django.conf.url importinclude 2、在主路由中: ```python url(r"^app02/",include("app02.urls")), url(r"^app03/",include("app03.urls")), ``` 3、在不同app中新建一個urls from app02 import views urlpatterns=[ url(r'^test/',views.test), ] 4、如果瀏覽器輸入app02/test/,就會響應到app02下views中的test去執行**7、反向解析:** 幹什麼用? -在檢視函式中重定向的地址原來是寫死的,如果url地址變更,我需要所有的url都修改,很麻煩,所以通過反向解析,獲得url的地址 如何使用: -路由層(專案自己的): url(r"^test_2/", views.test_2,name="test") test為test_2的別名 -檢視層:(用的比較多) from django.shortcuts import reverse url = reverse( 'test' ) #上面路由的別名 如果做了分組 url = reverse(”url地址的別名“,args=[] , kwargs={}) -模板層(也就是前端):(用的比較多) {% url "url地址的別名"%} href= “ {% url ”url地址的別名“ 引數1 引數2%} ” **8、名稱空間** -路由分發是,可以指定名稱空間: -url(r'^app02/',include('app02.urls',namespce='app02')), -url(r'^app03/',include("app03.urls",namespace="app03")), -在檢視中反向解析: url=reverse(”app02:test“) -在模板中反向解析: {%url ”app02:url 地址的別名“%} -個人不建議這麼使用: 在不同app的url中起別名的時候,新增app名_別名 **9、 django 2.0的path,re_path(瞭解)** -1.幾的url就是2.幾的re_path -2.0的path 第一個引數不再是正則表示式 -5個轉換器:int,str,slug,path,uuid **10、 自定義轉換器(瞭解):** -1 寫一個類: class MyCon: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return '%04d' % value -2 在urls中: -from django.urls import register_converter -register_converter(類名,'別名') -path('test/<別名:year>', views.test,name='year'), ``` 作業: day78 ```