目前我們學會如何實作在網頁上新增、刪除資料表資料的功能,接下來會學到如何實作在網頁上更新資料表資料的功能,為避免內容過多,所以會分成上下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
明天會繼續實作提交表單去更新資料表資料的功能。