Django系列 介面(Views)
Django是一種基於Python開發網頁的架構
這篇文章主要就是針對MVC中的V做修改
還記得第一次用到MVC架構是在寫Android Studio時
當時只學了一學期Python、一學期Java
甚至還對寫程式有莫名的恐懼與厭惡
那個時候的我還沒有感受到架構的好
現在才體會到、想學各種架構
卻發現時間不夠用啊!
建立Views
在
polls/views.py
裡面設定函數當calling這些url時應該回傳上面的views
舉例來說,以下分別輸入urls中設定的網址,會成功回傳在view.py
裡函數所設定Response的內容
http://127.0.0.1:8000/polls/
http://127.0.0.1:8000/polls/5/
http://127.0.0.1:8000/polls/5/results/
http://127.0.0.1:8000/polls/5/vote/
- 在polls下建立一個名為templates的資料夾,接著在建立一個名為polls的資料夾,最後在裡面新增一個名為
index.html
的檔案。以及修改view.py讓index這個函數能夠呼叫我們所創的tmplate頁面
這邊也要記得import loader、models等,這邊是根據發布日期顯示我們在Django中內建的資料庫中的前五個Question
最後顯示出來的畫面:
(較佳)或者我們可以將函數中的HttpResponse用render()取代,直接get template中的html
處理404 Error的畫面,使用到raise的觀念,如果網址中輸入的Question並不存在,就raise Http404這個畫面(記得import Http404),當然也可以使用自己設計404的頁面,但是就要另外做一些設定(點我
另外記得新增detail.html
,裡面可以先放,就可以先runserver跑看看有沒有成功了
404的頁面或者是使用
get_object_or_404
來處理404的畫面
與使用ObjectDoesNotExist的方法出來的結果頁面稍微不同修改
detail.py
,方法調用發生在{% for %}
迴圈中原本在
index.html
裡,我們為Question的連結網址做了下面這樣的設定1
<li><a href="/polls//"></a></li>
可以在url.py中看到我們為detail這個設的是
<int:question_id>
但是如果今天我們的網址名稱不想用polls或是想在polls後再新增一個路徑
如:polls/specifics/5
,此時我們就需在html裡面進行更動,當內容一多起來操作就會變得困難,因此我們將index.html
以及urls.py
成下面這樣
1 | <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |
- 但是由於一個Django專案裡可能會有很多個APP,此時url就會變得模糊
因此我們為polls進行命名,在polls/urls.py
新增一個APP_NAME
同時index.html
也要記得加上url的名稱