之前有在用Django写一些小网站,现在暑假想说再来複习一下之前买的这本书
于是我就把它写成一系列的文章,也方便查语法
而且因为这本书大概是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 templatedef 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 templatedef 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 templatefrom django.template.loader import get_templatedef 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_responsedef 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 = 1b = 'hello'c = [1, 2, 3]local_dic = locals()print(local_dic['a'])print(local_dic['b'])print(local_dic['c'])
结果
1hello[1, 2, 3]
有了locals就不需要自己手动输入那个可能会很长的字典了
只要修改为这样就可以了
return render_to_response('math.html', locals())