Flask之模版(2)

Flask默认使用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。下面主要回顾模版的渲染使用,以及Jinja2的语法。

1 模版渲染

1.1 目录结构

Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:
场景1: 模块
application文件应该与templates目录同级

/application.py
/templates
    /hello.html

场景2: 包
templates目录作为application的子目录

/application
    /__init__.py
    /templates
        /hello.html
1.2 渲染

Flask使用 render_template() 方法来渲染模板。渲染时框架会自动寻找templates目录下的网页文件,不必添加"templates"这个路径。
render_template()方法第一个参数为html文件名,后续参数为模版文件中的变量名,可支持字典类型变量。
在模板里,也可以访问 request 、 session 和 g 对象, 以及 get_flashed_messages() 函数。

用法示例
文件目录结构:
在这里插入图片描述
html文件user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask首页</title>
</head>
<body>
    {
   % if name %}
  <h1>Hello {
   {
    name }}!</h1>
{
   % else %}
  <h1>Hello world!</h1>
{
   % endif %}
</body>
</html>

模版渲染代码manager.py:

from flask import Flask, render_template
app = Flask(__name__)

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

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

在浏览器中输入URL:http://127.0.0.1:5000/user/bruce
页面显示如下
在这里插入图片描述

1.3 字典类型变量

当模版中变量比较多时,可以直接使用字典类型变量。
修改user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask首页</title>
</head>
<body>
    {
   % if name %}
  <h1>Hello {
   {
    name }}!</h1>
    <h2>user age: {
   {
   age}}, phone: {
   {
   phone}}!</h2>
{
   % else %}
  <h1>Hello world!</h1>
{
   % endif %}
</body>
</html>

修改渲染代码:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/user/")
@app.route("/user/<name>")
def index(name=None):
    info = {
   
        "name": name,
        "age": 33,
        "phone": 123456789
    }
    return render_template("user.html", **info)

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

浏览器输入URL:http://127.0.0.1:5000/user/bruce.xu
在这里插入图片描述

2 Flask变量传递

Jinja 2 默认配置如下:
所有扩展名为 .html 、 .htm 、 .xml 以及 .xhtml 的模板会开启自动转义
模板可以利用 {% autoescape %} 标签选择自动转义的开关。
Flask 在 Jinja2 上下文中插入了几个全局函数和助手,另外还有一些目前默认的值。

Flask全局变量
下面的全局变量默认在 Jinja2 模板中可用

变量 说明
config 当前的配置对象 (flask.config)
request 当前的请求对象 (flask.request)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
session 当前的会话对象 (flask.session)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
g 请求相关的全局变量 (flask.g)。当模版不是在活动的请求上下文中渲染时这个变量不可用。
url_for() flask.url_for() 函数
get_flashed_messages() flask.get_flashed_messages() 函数

(1)请求对象request
request对象可以用来获取请求的方法”request.method”,表单”request.form”,请求的参数”request.args”,请求地址”request.url”等。它本身是一个字典。在模板中,你一样可以获取这些内容,只要用表达式符号”{ { }}”括起来即可。

<p>{
   {
   request.url}}</p>

(2)会话对象session
session对象可以用来获取当前会话中保存的状态,它本身是一个字典。在模板中,你可以用表达式符号”{ { }}”来获取这个对象。
在request对象中设置session变量

@app.route('/')
def index():
    session['user']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值