Jinja2のテンプレートをレンダリング
あなたは、データベースからデータを照会することができ、その後、私は、レンダリングの終了(、テンプレートのレンダリングと呼ばれる専門の用語あなたの最初の外観をレンダリングし、ブラウザのレンダリングを与えるために)HTMLで対応するコンテンツを交換するために行って、その後、ブラウザに送信されました。このプロセスは、HTMLテンプレートのレンダリングデータに相当します。これは、いくつかの特殊記号を使用するようにHTMLコンテンツを表示するためにデータを交換するために本質的です。私は、実際には、既製のテンプレートのレンダリングツールが存在しているここでは特殊記号の私の定義とよ:jinja2
ダウンロード
pip install jinja2
htmlファイルを作成します
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<h1>姓名:{{name}}</h1>
<h1>爱好:</h1>
<ul>
{% for hobby in hobby_list %}
<li>{{hobby}}</li>
{% endfor %}
</ul>
</body>
</html>
次のように、Pythonのファイルを作成し、index2.htmlファイルをレンダリングするJinja2の使用します。
from wsgiref.simple_server import make_server
from jinja2 import Template
def index():
with open("index2.html", "r",encoding='utf-8') as f:
data = f.read()
template = Template(data) # 生成模板文件
ret = template.render({"name": "于谦", "hobby_list": ["烫头", "泡吧"]}) # 把数据填充到模板里面
return [bytes(ret, encoding="utf8"), ]
# 定义一个url和函数的对应关系
URL_LIST = [
("/index/", index),
]
def run_server(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf8'), ]) # 设置HTTP响应的状态码和头信息
url = environ['PATH_INFO'] # 取到用户输入的url
func = None # 将要执行的函数
for i in URL_LIST:
if i[0] == url:
func = i[1] # 去之前定义好的url列表里找url应该执行的函数
break
if func: # 如果能找到要执行的函数
return func() # 返回函数的执行结果
else:
return [bytes("404没有该页面", encoding="utf8"), ]
if __name__ == '__main__':
httpd = make_server('', 8000, run_server)
print("Serving HTTP on port 8000...")
httpd.serve_forever()
データは、今私たち自身の手書きで、ページを埋めるために、データベースからデータを照会することができます
データベースに接続pymysql使用します。
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="xxx", db="xxx", charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute("select name, age, department_id from userinfo")
user_list = cursor.fetchall()
cursor.close()
conn.close()
ユーザー表のテストを作成します。
CREATE TABLE user(
id int auto_increment PRIMARY KEY,
name CHAR(10) NOT NULL,
hobby CHAR(20) NOT NULL
)engine=innodb DEFAULT charset=UTF8;
原理は限り我々はJinja2の上のHTMLページでは文法のルールに従ってinternal'llは、動的なコンテンツのリターンを達成するために、指定された構文による置換を行う書いて、テンプレートの文字列置換です。