Flask模板

零、回顾

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
	return 'hello world'
	
if __name__ == '__main__':
	app.run()


一、模板的简单使用

一个Web有很多样式,若都在return语句添加,导致可读性差、不易维护,这时需要使用模板;

在当前项目中创建一个templates文件夹,在该目录下创建.html文件,将样式要求卸载里面;

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>{{content}}</h1>
    </body>
</html>

回到flaskApp.py文件,导入render_template方法,并将return语句接模板返回的字符串;

#-*-coding:utf8-*-
# 导入Flask类
from flask import Flask, request, url_for, render_template
from models import User

# 实例化一个Flask对象,参数是模块名或包名,Flask根据该参数确定应用的路径、静态文件和模板文件夹的默认路径
app = Flask(__name__)

# 应用的路由部分,指定视图函数
@app.route('/')
def hello_world():
    # 可运行,但可读性差
    # return '<h1>hello World</h1>'
    content = "Hello world"
    # render_template()方法渲染界面
    return render_template("index.html", content=content)

# 运行Flask应用
if __name__ == '__main__':
    app.run()

稍微复杂地,render_template方法返回类对象;

在当前目录下创建一个models.py文件,用以存放User类;

class User(object):
    def __init__(self, user_id, user_name):
        self.user_id = user_id
        self.user_name = user_name

创建一个user_index.html文件;

其中,变量是由{{}}双花括号括起来的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello {{user.user_name}}</h1>
    <h2>Your Id is {{user.user_id}}</h2>
</body>
</html>

再在index.py文件中添加一个路由;

#-*-coding:utf8-*-
from flask import Flask, request, url_for, render_template
from models import User

app = Flask(__name__)

@app.route('/user')
def user_index():
    user=User(1, 'wencheng')
    return render_template("user_index.html", user=user)

if __name__ == '__main__':
    app.run()


二、条件语句

在HTML文件中,if, esle,endif语句都是用{%和%}括起来的;

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        {% if user%}
            hello {{user.user_name}}
        {% else %}
            no this user
        {% endif %}
    </body>
</html>


三、循环语句

for, endfor语句用法同条件语句;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% for user in users %}
        {{user.user_id}}  {{user.user_name}}<br>
    {% endfor %}
</body>
</html>

再在flaskApp.py定义一个路由;

#-*-coding:utf8-*-
from flask import Flask, request, url_for, render_template
from models import User

app = Flask(__name__)

@app.route('/users')
def user_list():
    users=[]
    for i in range(1, 11):
        user = User(i, 'wencheng' + str(i))
        users.append(user)
    return render_template("user_list.html", users=users)

if __name__ == '__main__':
    app.run()


四、模板的继承

很多Web页面的头部导航部分、底部公司信息部分都是不变的;

可创建一个父类,将所有不变的功能方法定义在基类,;创建的子类可针对不同Web页面进行相应页面定义;

首先创建一个base.py文件,将标题和底部部分分别用div标签包围,中间可扩展部分使用block, endblock定义;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <h1>Header 极客学院</h1>
    </div>
    {%block content%}
    {%endblock%}
    <div>
        <h1>Footer jikexueyuan</h1>
    </div>
</body>
</html>

创建子类,命名为one_base.html和two_base.html文件,使用extends继承父类,使用block定义变化的部分;

{%extends "base.html"%}
{%block content%}
    <h2>这是第二页</h2>
{%endblock%}

最后在flaskApp.py文件中创建一个新的路由;

#-*-coding:utf8-*-
from flask import Flask, request, url_for, render_template
from models import User

app = Flask(__name__)

@app.route('/one')
def one_base():
    return render_template("one_base.html")

@app.route('/two')
def two_base():
    return render_template("two_base.html")

if __name__ == '__main__':
    app.run()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值