Python Flask学习_使用Jinja2模板响应请求

模板是一个 包含响应文本的文件,其中包含用占位符表示的动态部分。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User</title>
</head>
<body>
    <h1>Hello,{{ name }}</h1>                #{{ name }} 就是动态部分
</body>
</html>

使用真实值替换变量,再返回最终得到的响应字符串,这一过程就是渲染。

一、使用Jinja2模板引擎

from flask import render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/<name>')
def user(name):
    return render_template('user.html',name=name)

render_templates('user.html',name=name)。'user.html'指定使用的模板文件,name指定替换的变量。左边name表示模板中使用的占位符,是参量名;右边的name是当前的变量,里面值是要赋给模板的。

默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。因此,user.html和index.html都要放在templates子文件夹中。


二、Jinja2模板的变量

之前使用{{ name }} 在模板中表示变量,这是一种特殊占位符,表示这个值应当在渲染时获取

Jinja2能识别所有类型的变量,包括列表(list),字典(dict),对象(object)。

from flask import Flask
from flask_script import Manager
from flask import render_template

app = Flask(__name__)
manager = Manager(app)

class MyClass:
    def func(self):
        return "func"

def ord_func():
    return "Ordinary function"
@app.route("/")
def index():
    mydict = {}
    mydict["type"]= "dict"
    mylist = []
    mylist.append("list")
    myclass = MyClass()
    return render_template("myDict.html", mydict=mydict, mylist=mylist, myclass=myclass, myfunc = ord_func)

if __name__ == "__main__":
    manager.run()

分别定义了dict,list,class,function四种类型,然后传递给模板myDict.html。

再来看html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jinjia2模板测试</title>
</head>
<body>
    <h1>使用字典变量:{{mydict["type"]}}</h1>
    <h1>使用列表变量:{{mylist[0]}}</h1>
    <h1>使用普通函数变量:{{mylist[0]}}</h1>
    <h1>使用普通函数变量:{{myfunc()}}</h1>
    <h1>使用使用类方法变量:{{myclass.func()}}</h1>
</body>
</html>

在html文件中 ,就可以直接使用这四种类型了(当然,主要是表现逻辑,值主要也是用于显示的):{{ mydict["type"] }}, {{ mylist[0] }}, {{ myfunc() }}, {{ myclass.func() }}








猜你喜欢

转载自blog.csdn.net/bird333/article/details/80715938