模板渲染jnja2模块
模板渲染jnja2模块
模板的引入:
在返回动态页面时,上述我们在08版web框架返回每次访问的时间,利用自己写的占位符进行字符串替换进行动态响应;
在实际应用中,完全可以从数据库中读取数据,然后替换html页面中的相关内容(专业名词就是模板渲染,后台渲染先渲染,再返回给浏览器渲染),响应给浏览器动态数据。
数据替换的过程就是通过模板渲染数据,本质就是对HTML中的某些特殊符号进行了替换来展示动态数据。这里常用的特殊符号的定义有现成的渲染模板工具:jinja2模块(非内置模块,配置好pip环境变量的前提下在cmd交互式窗口执行:pip install jinja2或者在pycharm设置中的项目环境变量进行引入)。
jinja2模板渲染格式案例:
index.html
1 <!doctype html> 2 3 <html lang="en"> 4 5 <head> 6 7 <meta charset="UTF-8"> 8 9 <style> 10 11 table,th,td{ 12 13 border: 1px solid black; 14 15 border-collapse:collapse;} 16 17 </style> 18 19 <title>jinja2渲染模板</title> 20 21 </head> 22 23 <body> 24 25 <div> 26 27 <table> 28 29 <thead> 30 31 <tr> 32 33 <th>姓名</th> 34 35 <th>爱好</th> 36 37 </tr> 38 39 </thead> 40 41 <tbody> 42 43 <tr> 44 45 <td>{{name}}</td> 46 47 <td> 48 49 <ul> 50 51 {% for hobby in hobbylist%} 52 53 <li>{{hobby}}</li> 54 55 {% endfor %} 56 57 </ul> 58 59 </td> 60 61 </tr> 62 63 </tbody> 64 65 </table> 66 67 </div> 68 69 </body> 70 71 </html>
server服务端:
1 from wsgiref.simple_server import make_server#wsgiref基于模块原生socket的TCP通信服务程序 2 3 from jinja2 import Template #渲染模板 4 5 6 7 info=[{"zhang":["爬山","看书","旅游"]}] 8 9 10 11 def apllication(environ,start_response): 12 13 start_response("200 OK",[("Content-Type","text/html")]) 14 15 path=environ["PATH_INFO"] 16 17 if path=="/": 18 19 with open("index.html","r",encoding="utf-8")as f: 20 21 data=f.read() 22 23 24 25 temple=Template(data)#渲染模板 26 27 # 调用render方法进行数据渲染加载 28 29 ret=temple.render({"name":"zhang","hobbylist":["爬山","看书","旅游"]}) 30 31 return [ret.encode("utf-8")] 32 33 else: 34 35 data=b"Sorry:404 not fond!" 36 37 return [data] 38 39 40 41 if __name__ == '__main__': 42 43 44 45 httpd=make_server("127.0.0.1",8888,apllication) 46 47 httpd.serve_forever()
以上案例仅仅只演示了一个简单的使用方式,在实际应用中很多都是从数据库加载的,案例中的信息会有很多条,每个人都有对应的兴趣爱好,这样可以运用模板渲染进行动态的返回数据,在此就不在演示。
在django中的渲染模板使用的并不是jinja2模块