昨天我們修改member
的urls.py、views.py
和myworld
的urls.py
回應訪問者請求並讓網頁顯示Hello World!
。而今天我們會透過回傳Template
的方式,將.html
檔回傳到訪問者那端,而不再只是回傳簡單的字串並顯示在網頁上。
在【Day 02】Django 簡介,有提及Template
其實就是.html
檔,而Templates
就是收納這些Template
的資料夾。但觀察members
會發現裡面並沒有一個名為Templates
的資料夾,所以我們要先自己建資料夾並在裡面建好一個.html
檔。
接著修改新建的.html
檔如下 :
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
<p>Welcome to my first Django project!</p>
</body>
</html>
新增完templates
資料夾和.html
檔後,接著修改members
的views.py
。
還記得我們之前寫了一個名為index
的方法用來回應訪問者請求並回傳Hello World!
嗎?
在這一小節,我們需要修改這個方法,讓它把我們建立好的.html
檔回傳到訪問者的瀏覽器上並顯示出來。
將members
的views.py
修改如下 :
from django.http import HttpResponse
from django.template import loader #用來載入template的套件
def index(request):
template = loader.get_template('myfirst.html')
return HttpResponse(template.render()) #回傳template
myfirst.html
的檔案並回傳一個Template
物件Template
物件渲染到瀏覽器上(意同於讓訪問者瀏覽myfirst.html
這個檔案)看到這邊可能會有點疑問,為什麼昨天的Hello World!
網頁不需要做這一步呢? 因為想做到更多更複雜的事,我們就必須要正式安裝App
,讓我們的Django Project
認識members
這個App
。
打開myworld
下面的settings.py
,接著修改一個叫做IINSTALLED_APPS
的list就像下面這樣 :
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'members.apps.MembersConfig'
]
這樣就成功安裝members
這個App
囉! 當project
不再需要members
這個App
,只要刪除'members.apps.MembersConfig'
這行就可以輕鬆卸載,真的是非常方便的插拔機制。
把
members.apps.MembersConfig
改成members
也可以,但比較建議使用前者。
最後,我們要來檢視剛剛寫的網頁囉!
跟前面一樣需要做以下的事 :
打開CMD
並切換到虛擬環境(python venv
)的資料夾路徑下
(實際venv
路徑不一定會跟我一樣喔!)
輸入以下指令啟動虛擬環境
Scripts\activate.bat
啟動虛擬環境後結果如下:
接著切換路徑到Django Project
所在的資料夾下
接著輸入以下指令Start Server
py manage.py runserver
在瀏覽器輸入對應的網址(127.0.0.1:8000/members/
)就可以看到index
(view
),在收到我們的request
後,把myfirst.html
這個temlate
回傳到瀏覽器並渲染顯示在畫面上
到這邊今天的內容就算結束了,不過再補充一個小東西。
目前在Run Server
後,都會看到下面這樣的提示:
You have 18 unapplied migration(s).
Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
想要不出現這些提示的方法也很簡單,先Stop Server
並照提示內容輸入以下指令 :
python manage.py migrate
接著再次Run Server
就會發現提示訊息不見了 :
至於
python manage.py migrate
到底在做什麼,之後會用番外篇做更清楚的介紹。