Flask响应请求与模板引擎
响应请求
响应html
@index_page.route("/text")
def text():
return "text/html"
@index_page.route("/text_same")
def text_same():
response = make_response("text/html",200)
return response
响应json
@index_page.route("/json")
def json():
import json
data = {"a":"b"}
response = make_response(json.dumps(data))
response.headers["Content-Type"] = "application/json"
return response
@index_page.route("/json_same")
def json_same():
data = {"a" : "b"}
response = make_response(jsonify(data))
return response
**模板响应 **
@index_page.route("/template")
def template():
return render_template("index.html")
相见如下所示Jinja2模板引擎。
模板引擎
Jinja2用于前后端不分离项目。
基本语法
html文件中的代码
var name = {{name}}
{% if user %}
{{ user.nickname }} 联系QQ:{{user.qq}}主页:{{user.home_page}}
{% endif %}
{% for tmp_num in num_list %}
{{ tmp_num }}
{% endfor %}
对应python代码:
@index_page.route("/template")
def template():
name = "test01"
context = {"name":name}
context['user'] = {'nickname':'小叮当',"qq":"1660219734","home_page":"banshengua.top"}
context['num_list'] = [1,2,3,4,5]
return render_template("index.html",**context)
Jinja中最强大的部分就是模板继承。
模板继承允许你构建一个包含你站点共同元素的基本模板“骨架”,并定义子模块可以覆盖的块。
(类似于QT中QSS的语法,例如,#QPushButton{xxx},对当前ui文件中的所有QPushButton部件进行统一的美化。)其实也不是很贴切。
{% extends "common/layout.html" %}
{% block content %}
hello i am extend_template
{% endblock %}
common/layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是统一模板</title>
</head>
<body>
{% block content %} {% endblock %}
</body>
</html>
对应python调用
@index_page.route("/extend_template")
def extend_template():
return render_template("extend_template.html")
项目结构:
这里的layout就是一个通用的模板。extend_template.html和extend_template_other.html在layout.html基础上进行修改。(例如:子类重写父类)
|