目前我們學會如何實作在網頁上新增、刪除資料表資料的功能,接下來會學到如何實作在網頁上更新資料表資料的功能,為避免內容過多,所以會分成上下2個部分,各自獨立寫成文章。
那具體來說,我們今天到底會做些什麼呢?
- 在
members資料夾的index.html新增連向更新資料表資料的表單連結 - 在
members資料夾下建立更新資料表資料的表單update.html - 修改
members資料夾的views.py和urls.py讓訪問者能順利看到更新資料的表單
修改 Templates
為了讓訪問者能順利進到表單並更新資料表上的資料,我們需要在members/indexx.html原先的資料表格上,再添加1欄update連結到表單。
把members/index.html修改成像下方這樣 :
1 | <h1>Members</h1> |
- 在原始碼的表格新增1欄到更新資料表資料的表單連結,跟上次實作刪除資料表資料的功能一樣,這次我們依然會用到帶有參數的非固定連結
update/{{ x.id }},所以在修改URLs的時候,也會採用比較特殊的格式。
目前改完看起來會是這樣 :

新增 Templates
新增到表單的連結後,我們要來製作更新資料表資料的表單啦!
在members/templates資料夾下面新增1個.html檔update.html :

然後把原先空白的檔案改成下面這樣 :
1 | <h1>Update member</h1> |
關於mymember.id/firstname/lastname資料的取得,跟之前一樣會透過views.py裡面的方法,將資料表上對應要更新的資料值拿出後傳給update.html(以Context的形式傳入,Key-Value),資料進入update.html後,可以用類似物件導向的方式存取各個屬性值。
這邊會這樣寫是希望在更新資料之前,可以看到現有的資料值,而不是進來就是空白的更新表單,導致對照修改資料前後差異的不方便。
表單新增完後看起來會像這樣 :
(實際上做到這邊還無法看到表單跟資料,因為還沒修改Views跟URLs)

修改 URLs
修改URLs能讓表單找到通向訪問者瀏覽器的路!
把members/urls.py修改成以下這樣 :
1 | from django.urls import path |
- 再次複習在【Day 17】出現的新格式
<int:id>,它是用來讓path可以攜帶參數,前面的int是參數型別,後面的id則是參數名稱。除此之外,views.py的update方法在處理請求的時候,跟以往不同會以update(request,id)的形式被呼叫,而最後的路徑別名則是跟之前相同沒有改變功能。
修改完URLs後,我們還缺1個在members/views.py的update方法。
修改 Views
讓表單找到正確的路後,我們需要在members/views.py裡新增名為update的方法,用來處理訪問者拜訪表單所產生的請求。
把members/views.py修改成像下面這樣 :
1 | #上面的東西都沒變所以省略... |
- 因為在
members/urls.py使用帶有參數的path,所以方法update的參數包含request和id。 - 把特定
id的資料表紀錄(Record)拿出來放到mymember裡面。 - 載入
update.html為要顯示在瀏覽器畫面的template。 context採key-value的形式,它是要傳入template(update.html) 的資料,這裡把剛剛拿到的資料表紀錄放進去。- 將資料(
context)傳入template(update.html),然後把網頁渲染到瀏覽器的畫面上。
最後來檢視一下今天的成果吧!
啟動 Server 檢視成果
-
打開
CMD並切換到虛擬環境(python venv)的資料夾路徑下(實際
venv路徑不一定會跟我一樣喔!)
-
輸入以下指令啟動虛擬環境
1
Scripts\activate.bat

啟動虛擬環境後結果如下:

-
接著切換路徑到
Django Project所在的資料夾下
-
接著輸入以下指令
Start Server1
py manage.py runserver

-
在瀏覽器輸入對應的網址(
127.0.0.1:8000/members/),接著點擊update那欄就可以看到這次的成果- 點擊 update

- 可以看到該筆紀錄(Record)的資料被預設填入框內

- 點擊 update
明天會繼續實作提交表單去更新資料表資料的功能。