之前有在用Django寫一些小網站,現在暑假想說再來複習一下之前買的這本書
於是我就把它寫成一系列的文章,也方便查語法
而且因為這本書大概是2014年出的,如今Django也已經出到2.多版
有些內容也變得不再支援或適用,而且語法或許也改變了
所以我會以最新版的Python和Django來修正這本書的內容跟程式碼
template,模板,又稱樣板
在django模板中註解的語法
{# this is comment #}
使用django自帶的shell
在終端機中輸入指令,建立基本的模板
>>> from django import template
>>> t = template.Template('I love {{ name }}.')
>>> c = template.Context({'name': 'Mary'})
>>> print(t.render(c))
I love Mary.
Template物件中的render方法,執行的就是填寫的動作
修改views.py
from django import template
def math(request, a, b):
a = float(a)
b = float(b)
s = a + b
d = a - b
p = a * b
q = a / b
t = template.Template('<html>sum={{s}}<br>dif={{d}}<br>pro={{p}}<br>quo={{q}}</html>')
c = template.Context({'s': s, 'd': d, 'p': p, 'q': q})
return HttpResponse(t.render(c))
在上層mysite中新增一個資料夾templates專門放置模板
在templates中新增math.html
<html>
sum={{s}}<br>
dif={{d}}<br>
pro={{p}}<br>
quo={{q}}
</html>
修改views.py
from django import template
def math(request, a, b):
a = float(a)
b = float(b)
s = a + b
d = a - b
p = a * b
q = a / b
with open('templates/math.html', 'r') as reader:
t = template.Template(reader.read())
c = template.Context({'s': s, 'd': d, 'p': p, 'q': q})
return HttpResponse(t.render(c))
因為BASE_DIR設定在上層的mysite,所以開檔路徑可以這樣設置
修改views.py
from django import template
from django.template.loader import get_template
def math(request, a, b):
a = float(a)
b = float(b)
s = a + b
d = a - b
p = a * b
q = a / b
t = get_template('math.html')
return HttpResponse(t.render({'s': s, 'd': d, 'p': p, 'q': q}))
get_template函式將會讀取一個模板檔並且回傳一個模板物件
接著我們要使用render_to_response簡化程式碼
修改views.py
from django.shortcuts import render_to_response
def math(request, a, b):
a = float(a)
b = float(b)
s = a + b
d = a - b
p = a * b
q = a / b
return render_to_response('math.html', {'s': s, 'd': d, 'p': p, 'q': q})
locals()這個內建函數將會回傳一個字典,以區域變數的名稱為鍵(字串形式),區域變數的值為值
舉個例子
a = 1
b = 'hello'
c = [1, 2, 3]
local_dic = locals()
print(local_dic['a'])
print(local_dic['b'])
print(local_dic['c'])
結果
1
hello
[1, 2, 3]
有了locals就不需要自己手動輸入那個可能會很長的字典了
只要修改為這樣就可以了
return render_to_response('math.html', locals())