date: 2021-11-08title: python之jinja2模板渲染 #标题
tags: #标签
categories: python # 分类

jinja2工具可以将从数据库中查询到的数据,去替换我html中的对应内容(专业名词叫做模板渲染,你先渲染一下,再返回给浏览器),然后再发送给浏览器完成渲染。 这个过程就相当于HTML模板渲染数据。 本质上就是HTML内容中利用一些特殊的符号来替换要展示的数据。

html模板文件

要用到的html模板文件如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. #d1 {
  8. height: 100px;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <div id="d1"></div>
  14. <hr/>
  15. <h1>{{ userinfo }}</h1> <!--这是要传入的变量-->
  16. <ul>
  17. <!--下面是将传入的变量进行分别取值,然后渲染到一个列表中-->
  18. {% for k,v in userinfo.items() %}
  19. <li>{{ k }} === {{ v }}</li>
  20. {% endfor %}
  21. </ul>
  22. <hr/>
  23. </body>
  24. </html>

python代码

服务端代码如下:

  1. import pymysql
  2. from wsgiref.simple_server import make_server
  3. from jinja2 import Template
  4. # 从数据库中拿数据
  5. def show_database():
  6. mysql_conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123.com', database='ljz')
  7. cur = mysql_conn.cursor(cursor=pymysql.cursors.DictCursor)
  8. try:
  9. sql = "select * from userinfo where id = 2"
  10. cur.execute(sql)
  11. return cur.fetchone()
  12. except Exception as exp:
  13. print(exp)
  14. mysql_conn.rollback()
  15. cur.close()
  16. mysql_conn.close()
  17. def html():
  18. # html文件内容
  19. with open("t1.html", 'r', encoding='utf-8') as f:
  20. data = f.read()
  21. # 将拿到的内容传给Template方法
  22. tmp = Template(data)
  23. # 从数据库中读数据
  24. userinfo_data = show_database()
  25. # 进行渲染,userinfo是自定义的名字,与html文件中接收变量的名字一致,userinfo_data为数据库中取到的值
  26. data = tmp.render({'userinfo': userinfo_data})
  27. # 返回渲染后的数据
  28. data = data.encode('utf-8')
  29. return data
  30. # 实现http服务的代码
  31. def application(environ, start_response):
  32. # start_response('200 OK', [('k1', 'v1'), ('k2', 'v2')])
  33. start_response('200 OK', [])
  34. path = environ['PATH_INFO']
  35. if path == '/index.html':
  36. ret = html()
  37. else:
  38. ret = b'404 not found!!!!'
  39. return [ret]
  40. httpd = make_server('127.0.0.1', 8080, application)
  41. httpd.serve_forever()
  42. print('Serving HTTP on port 8080...')

运行上述代码后,浏览器访问http://127.0.0.1:8080/index.html,返回页面如下(正确渲染到数据,则表示jinja2渲染成功):

python之jinja2模板渲染 - 图1