上一節講述了django和第一個項目HelloWorld,這節我們講述如何使用模板,並做一個簡單的站點訪問計數器。
1、建立模板
在myblog模塊文件夾(即包含__init__.py的文件夾)下面新建一個文件夾templates,用於存放HTML模板,在templates下建立一個index.html
<html> <body> <h1>Welcome</h1> <p>Learning Python and Django Here!</p> </body> </html>
2、制定模板路徑
修改myblog模塊文件夾的setting.py,將我們之前新建的模板文件夾路徑添加到進去,注意元組只有一個元素時要添加一個逗號","
TEMPLATE_DIRS = (
'myblog/templates',)
3、導入模塊
修改我們之前HelloWorld項目里面的views.py,將模板導入,並設置一個上下文:
#!-*-encoding:utf-8-*- from django.http import HttpResponse from django.template import loader,Context def myHelloWorld(request): t = loader.get_template("index.html")#導入模板 para ={}#上下文參數 c = Context(para)#上下文 return HttpResponse(t.render(c))
4、查看模塊是否導入成功
切換到manage.py所在目錄
python manage.py runserver
在瀏覽器中打開http://127.0.0.1:8000/Hello/,如果沒有出現錯誤的話,應該看到原來的Hello my django 已經變為我們index.html定義的布局
5、使用模板變量進行交互
修改我們的模板index.html,設置連個模板變量,title和welcome:
<html> <body> <title>{{title}}</title> <h1>{{wlecome}}</h1> <p>Learning Python and Django Here!</p> </body> </html>
6、在view中使用模板變量
修改我們的views.py,以字典的格式將上下文參數設置為para = {"title":"MyBlog","welcome":"歡迎"},其中鍵是模板中的變量名,值是我們希望顯示的值:
#!-*-encoding:utf-8-*- from django.http import HttpResponse from django.template import loader,Context def myHelloWorld(request): t = loader.get_template("index.html")#導入模板 para = {"title":"MyBlog","welcome":"歡迎"}#上下文參數 c = Context(para)#上下文 return HttpResponse(t.render(c))
模板變量的值可以是字典,字符串,列表,對象,函數,具體看django的template文檔
7、查看模板變量是否起作用
如果剛剛的runserver沒有關閉,那么服務器就一直還開着,如果管了,重新啟動一次,在瀏覽器刷新http://127.0.0.1:8000/Hello/
我們會看到,設置的title變為了"MyBlog",welcome變成了"歡迎",說明模板變量起作用了
8、設置站點訪問計數器
先修改index.html如下:
<html> <body> <title>{{title}}</title> <h1>{{welcome}}</h1> <p>Learning Python and Django Here!</p> <li>{{content}}</li> <p></p> <li>您是第{{count}}個訪問本站的朋友</li> <li>訪問時間:{{time}}</li> </body> </html>
現在我們的模板中有了5個模板變量。
我們利用一個文件保存已經訪問過本站點的次數,修改views.py如下:
#!-*-encoding:utf-8-*- from django.http import HttpResponse from django.template import loader,Context def getTime():#獲取當前時間 import time return time.ctime() def getCount():#獲取訪問次數 countfile = open('count.dat','a+')#以讀寫形式打開文件 counttext = countfile.read() try: count = int(counttext)+1 except: count = 1 countfile.seek(0) countfile.truncate()#清空文件 countfile.write(str(count))#重新寫入新的訪問量 countfile.flush() countfile.close() return count def myHelloWorld(request): t = loader.get_template("index.html")#導入模板 time = getTime() count = getCount() para = {"title":"MyBlog",'welcome':"歡迎","content":"今天我們學習如何制作一個訪問站點計數器","count":count,"time":time} c = Context(para)#上下文 return HttpResponse(t.render(c))
這里面主要添加了兩個方法,一個用於獲取當前時間,另一個用於獲取訪問次數。
9、測試我們的站點計數器
在測試之前我們對URL路徑做一個小的修改,將Hello路徑換成index路徑,這樣看書去跟第一個項目有區別些。
url(r'^index/$',myHelloWorld)
在瀏覽器其中刷新http://127.0.0.1:8000/Hello/將會看到404 not found
換成http://127.0.0.1:8000/index/后,我們的站點訪問計數器就工作了:
不斷的刷新瀏覽器,你會看到訪問次數在增加...
如果這里出現錯誤,看錯誤提示,很可能是亂碼錯誤:
這是因為我們的py文件設置的utf-8格式,而HTML文件用的GBK格式,你可以用NotePad++等編輯器編輯一下html文件的格式,設置為utf-8格式就好了
10、總結
這一節我們學會了,使用模板和模板變量,當然這里只是一點皮毛,但對我們理解模板有着啟蒙的作用。