1. 程式人生 > >Django url (路由)

Django url (路由)

**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 import
include ​ 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 ```