Flask框架---模板引擎简介及向模板传参/模板中if、for的使用

模板引擎

实际开发过程中,为提升开发效率而使前后端分离。后端负责业务逻辑及数据访问(业务逻辑),前端负责表现及交互逻辑(表现逻辑)。为分离前后端业务而将表现逻辑交给了模板引擎,模板引擎通过渲染使用真实值替换网页模板中的变量,生成一个标准的HTML文档。
Falsk框架通常使用Jinja2模板引擎实现复杂的页面渲染
示例:
模拟首页页面:
在这里插入图片描述
导入render_template()方法渲染模板:

from flask import Flask
from flask import render_template

app = Flask(__name__)


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


@app.route('/user/<username>')
def list_user(username):
    return render_template('user.html')


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

模拟首页效果:
在这里插入图片描述

向模板传参

Flask通过Jinja2模板引擎渲染模板时,可将程序中的参数传递给指定的模板进行渲染。
render_template()函数第一个参数指定模板文件名称,第二个参数用于向模板中传递参数变量(可为空)
示例1:
模拟用户界面user.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户中心</title>
    <h1>用户中心</h1>
    <p>欢迎你,{{ name }}</p>
</head>
<body>

</body>
</html>

app.py:

from flask import Flask
from flask import render_template

app = Flask(__name__)


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


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


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

传参效果:
在这里插入图片描述
示例2:以键值对方式或**locals()方法传参
模拟首页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <h1>首页</h1>
</head>
<body>
书名:{{ book }}<br>
作者:{{ author }}
</body>
</html>

app.py:

from flask import Flask
from flask import render_template

app = Flask(__name__)


@app.route('/')
def index():
    book = '乔布斯传'
    author = '沃尔特'
    return render_template('index.html', **locals())


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


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

其中return render_template(‘user.html’,**locals())等价于 return
render_template(‘user.html’,book=book,author=author),后面这种方式即为键值对传递参数。

传参效果:
在这里插入图片描述

Flask框架在模板引擎中if/for的使用

注意:在模板引擎中 if/for 必须放到{% %}中

基本语法:
if:

{% if condition %}
{% elif %}
{% else %}
{% endif %}

for:

{% for obj in objs %}
循环体语句
{% endfor %}

示例1:if语句
模拟首页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <h1>首页</h1>
</head>
<body>
{% if num==1 %}
<h3>one</h3>
{% elif num==2 %}
<h3>two</h3>
{% else %}
<h3>three</h3>
{% endif %}
{#{{ num }}#}
</body>
</html>

app.py:

from flask import Flask
from flask import render_template
import random

app = Flask(__name__)


@app.route('/')
def index():
    ran=random.randint(1,3)
    return render_template('index.html',num=ran)


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

if演示效果:
在这里插入图片描述
多次刷新则num值发生变化
示例2:for语句
模拟首页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>List</title>
</head>
<body>
<table>
    <thead>
    <th>姓名</th>
    <th>班级</th>
    </thead>
    <tbody>
    {% for list in lists %}
    <tr>
        <td>{{ list.name }}</td>
        <td>{{ list.class }}</td>
    </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

app.py:

from flask import Flask
from flask import render_template

app = Flask(__name__)


@app.route('/')
def index():
    lists=[{'name':'zhangsan','class':'one'},{'name':'lisr','class':'eight'},{'name':'wangwu','class':'three'}]
    return render_template('list.html',**locals())


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

for演示效果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值