今天來聊聊 Route
在專案目錄下有個 urls.py
這個檔案是用來處理網頁請求(request)
伺服器一接到網頁請求會到 <proj>/urls.py
中做配對 再來到 哪個Controller(views) 做處理
假如要有多一頁 about 路徑,http://localhost:8000/about/
可以加上
path('about/', views.XX ),
官網範例
https://docs.djangoproject.com/en/2.0/topics/http/urls/#example
除了寫死的路徑,如果像[Day 03]提到的首頁,可以用 正則表示式(regular expression) 來設定
正則表示式真的好用,網路上有很多教學,可以學一下
可以加上,include 這裡是指包含main/urls.py
^ : 比對開頭位置
. : 比對任何字元
* : 前面一個字元可以 0~多 個
$ : 比對結尾位置
<proj>/urls.py
re_path(r'^.*', include('main.urls')),
main/urls.py
re_path(r'^$', views.main),
include() 的部分再講多一點
舉例如果路徑有
http://localhost:8000/main/about/
http://localhost:8000/main/demoPage/
可以這樣寫
<proj> /urls.py
re_path(r'^main/', include('main.urls')),
main/urls.py
re_path(r'^about/$', views.about),
re_path(r'^demoPage/$', views.demoPage),
還可以用在傳參數上
以往可能傳統方式要傳id ... 等等 參數,會使用問號的方式 http://localhost:8000/post/?id=1
這時候就可以用正則表示式
http://localhost:8000/post/1/
\d : 僅數字
+ : 前面一個字元需要 1~多 個
urls.py
re_path('post/(?P<id>\d+)/', views.post),
要在 views.py function 要加上參數
views.py
def post(reuest, id):
return HttpResponse('Id is {}'.format(id))
提醒一下,以前遇到的問題(bug),找不到views、找錯views
配對的順序是由上往下的,一有符合就過去了,不會在往下
所以在前面的要比較嚴謹,或是正則表示式要寫嚴謹一點。
今天就寫到這邊了,還有一些參數可以設定,以後遇到再講好了...
Route name, namespace, 404 pages...
心得一下:
這次遇到djagno 2.0 改版 urls.py 部分改了一些寫法,例如 url => path, re_path