---
# System prepended metadata

title: 'Django 2.0 文章集 [5] view 視圖'
tags: [python, Django, django2.0]

---

#  Django 2.0 文章集 [5] view 視圖

###### tags: `Django`, `django2.0`, `python`

- [ ]  完成 ORM(模型類) 的設計與設定後，可以來著手 view(視圖)了！
- [ ]  view 相當於一個 function，Django 中所有與程式邏輯有關的 code 皆坐落於此
- [ ]  view 會將接收到的 HTTP request 做處理後，回傳適當的 HTTP response


##  § 建立 views(視圖)
#### 編輯 mysite/blog/views.py

```
from django.shortcuts import render, get_object_or_404
from model import Post

def post_list(request):
    ###  利用之前自製的模型管理器取出 Post資料表 的全部記錄
    all_posts = Post.published.all() 
    
    return render(request,
                  "blog/post/list.html",
                  {"posts": all_posts})
```

###  (程式碼解釋)
- [ ] 先將資料庫中 Post 資料表的所有記錄取出並暫存到 all_posts
- [ ] 再用 all_posts 填滿(padding) 所有 "list.html"模板中，取名叫 "posts" 的變數。此步驟亦可稱之渲染(render) 模板。
- [ ] P.S. 渲染完畢即可得內容完整的 html 檔，作為 HTTP response 回傳給使用者的 browser


##  § 綁定 URL路徑 (與 view 的對應)
###  (1) 先為應用程式(blog) 添加 URL 設定
####  mysite/blog/urls.py

###  (2) 再為專案添加 URL 設定
#### 編輯 mysite/mysite/urls.py

  Q: 為何不全寫在專案 URL 設定的 .py 檔？
  
  A:     
- [ ] 當 app 很多的時候，每個 app 可能都有數個 views 需要各自的 url 對應。
- [ ] 若將分屬不同 app 的所有 view-url 對應都塞在 mysite/urls.py (專案的總 URL 設定區)，很可能導致管理/查詢不易。
- [ ] 若採上述方式，每個 app 在總 URL 設定區只需一行， URL 路徑指向 app(附屬) 的 URL 設定區即可。
- [ ] 而每個 view-url 對應實際上是寫在 app 的 URL 設定區。這樣一來即便寫了很多 views 也比較容易處理！
