模板
- 模板是可以根据字典数据动态变化的HTML网页
- 模板可以根据视图中传递的字典数据动态生成响应的HTML页面
模板配置
创建模板文件夹<项目名>/templates
在settings.py中templates配置项
1. BACKEND:指定模板的引擎
2. DIRS:模板的搜索目录
3. APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件
4. OPPTIONS:有关模板的选项
- 配置项中需要修改的
设置DIRS - ‘DIRS’: [Path.joinpath(BASE_DIR, ‘templates’)],
模板的加载方法
- 通过loader获得模板,通过httpresponse进行响应
from django.template import loader # 1. 通过loader加载模板 t = loader.get_template("模板文件名") # 2. 将t改成HTML字符串 html = t.render(字典数据) # 3. 用响应对象将转换的字符串内容返回给浏览器 return HttpResponse(html)
- 使用render()直接加载并响应模板
from django.shortcuts import render return render(request, '模板文件名', 字典数据) # 字典数据可以用locals()函数自动打包所有变量为字典
视图层与模板层之间的交互
- 视图函数中可以将python变量封装到字典中传递到模板
def xxx_view(request): dic = {'a':1,'b':[1,2]} return render(request,'xxx.html',dic)
- 模板层中我们可以用{{变量名}}的语法,调用视图传进来的变量 jinja用法详细可看jinja专栏
模板的变量
- str 字符串
- int 整形
- list 数组
- tuple 元祖
- dict 字典
- func 方法
- obj 类实例化的对象
def test_html_param(request):
dic = {}
dic['int'] = 88
dic['str'] = 'guoxiaonao'
dic['lst'] = ['Tom', 'Jack', 'Lily']
dic['dict'] = {'a':9, 'b':8}
dic['func'] = say_hi
dic['class_obj'] = Dog()
dic['script'] = '<script>alert(1111)</script>'
return render(request, 'test_html_param.html', dic)
<h3>int 是 {{ int|add:"2" }}</h3>
<h3>str 是 {{ str|upper }}</h3>
<h3>lst 是 {{ lst }}</h3>
<h3>lst 是 {{ lst.0 }}</h3>
<h3>dict 是 {{ dict }}</h3>
<h3>dict['a'] 是 {{ dict.a }}</h3>
<h3>function 是 {{ func }}</h3>
<h3>class_obj 是 {{ class_obj.say }}</h3>
<h3>script 是 {{ script|safe }}</h3>