iT邦幫忙

0

Django學習紀錄 6.模板初探

之前有在用Django寫一些小網站,現在暑假想說再來複習一下之前買的這本書
https://ithelp.ithome.com.tw/upload/images/20190724/20118889bj9fH1vhuR.jpg
於是我就把它寫成一系列的文章,也方便查語法
而且因為這本書大概是2014年出的,如今Django也已經出到2.多版
有些內容也變得不再支援或適用,而且語法或許也改變了
所以我會以最新版的Python和Django來修正這本書的內容跟程式碼

目錄:django系列文章-Django學習紀錄

6.模板初探

6.1 使用模板的理由

template,模板,又稱樣板

6.2 創建與填寫模板

6.2.1 模板成分表

在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))

6.2.2 將模板分離

在上層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,所以開檔路徑可以這樣設置

6.2.3 建立模板目錄與使用者自動載入

修改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})

6.2.4 使用locals函數

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())

上一篇:Django學習紀錄 5.視圖與URL[附正規表達式的重點整理]

下一篇:Django學習紀錄 7.模板的變量與標籤[附常用的過濾器整理]


尚未有邦友留言

立即登入留言