三、Jinja2-模版渲染、访问对象属性

101 阅读1分钟

在实际开发网站中,为了是网站更加美观,需要渲染一个有富文本标签的页面,通常包含大量的HTML代码,因此在flask中,渲染HTML通常会交给模版引擎来实现,而flask中默认配套的模版引擎是jinja2,jinja2是一个高效、可扩展的模版引擎,jinja2可以独立于flask使用,如被Django使用

一、渲染模版

需要导入 render_template,使用render_template使用templates文件下的index.html文件,地址栏输入对应地址,页面即可输出html标签h1中的内容

@app.route('/')
def hello_world():
    return render_template("index.html")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>知了知了</title>
</head>
<body>
<h1>知了首页内容,这里是知了传课首页内容</h1>
</body>
</html>
二、渲染变量

传递了blog_id和username两个参数,html中使用参数的方式是使用 {{}},即可引用

@app.route("/blog/<blog_id>")
def  blog_detail(blog_id):
    return render_template("blog_detail.html",blog_id=blog_id,username="admin") #将blog_id和username传给了html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>知了</title>
</head>
<body>
我是{{username}}
<h1>博客园第{{blog_id}}页</h1>
</body>
</html>
三、渲染字典类型变量和类对象变量
class user():
    def __init__(self,name,email):
        self.name = name
        self.email = email

@app.route("/variable")
def variable():
    hobby = '游戏'
    user_detail = user(name="admin",email="xxx@qq.com")
    person = {"age":30,"jineng":"game"}
    return render_template("variable.html",hobby=hobby,user=user_detail,person=person)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>知了</title>
</head>
<body>
<h1>兴趣爱好:{{hobby}}</h1>
<h1>用户名:{{user.name}}</h1>
<h1>邮箱名:{{user.email}}</h1>
年龄:{{person.age}}
技能:{{person.jineng}}
</body>
</html>
整体代码
from flask import Flask,render_template

app = Flask(__name__)



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

@app.route("/blog/<blog_id>")
def  blog_detail(blog_id):
    return render_template("blog_detail.html",blog_id=blog_id,username="admin") #将blog_id和username传给了html文件

class user():
    def __init__(self,name,email):
        self.name = name
        self.email = email

@app.route("/variable")
def variable():
    hobby = '游戏'
    user_detail = user(name="admin",email="xxx@qq.com")
    person = {"age":30,"jineng":"game"}
    return render_template("variable.html",hobby=hobby,user=user_detail,person=person)

if __name__ == '__main__':
    app.run(debug=True,host="0.0.0.0",port=8000)