Menu

Python Flask 渲染模板

1. 模板传参

单参数 – 前端参数化

  • 模板放在templates文件夹下,默认加载templates目录下文件
  • 如果只有一个参数,直接在render_template函数中添加参数即可
  • 使用{{ * }}获取变量
@app.route('/')
def index():
    return render_template('demotest.html', name='hjk')
<body>
    <p>hello, {{ name }}</p>
</body>

输出结果如下图:

多参数

  • 方法1: 对象取值
  • 可以使用{{ params[property ]}}{{ params.property }}访问模型中的属性或字典
+ @app.route('/')
def index():
    d  = {'name': 'hjk', 'age': 18}
    return render_template('demotest.html', p=d)
<body>
    <p>hello, {{ p.name }}</p>
    <p>hello, {{ p['age'] }}</p>
</body>

输出结果如下图:

  • 方法2:传参解包
  • 可以先把所有参数放在字典中,然后在render_template中使用两个**解包传参
@app.route('/')
def index():
    d  = {'name': 'hjk', 'age': 18}
    return render_template('demotest.html', **d)
<body>
    <p>hello, {{ name }}</p>
    <p>hello, {{ age }}</p>
</body>

设置变量

  • 前端模板设置变量
<body>
    {% set name='hjk' %}
    <p>hello, {{ name }}</p>
</body>

2. 逻辑分支

if分支

  • 案例说明:如果age>18岁,输出name,否则给出提示
  • 注意结尾的{% endif %}
@app.route('/')
def index():
    d  = {'name': 'hjk', 'age': 18}
    return render_template('demotest.html', **d)
<body>
    {% if age>18 %}
    <p>hello, {{ name }}</p>
    {% else %}
    <p>sorry, 您未成年,请在监护人的陪同下使用监护人的账号登陆</p>
    {% endif %}
</body>

for循环

  • 字典、列表的遍历与python基本类似
@app.route('/')
def index():
    d  = [{'name': 'hjk', 'age': 18},
          {'name': 'hjl', 'age': 19},
          {'name': 'hjt', 'age': 12}]
    return render_template('demotest.html', P=d)
<body>
    {% for p in P %}
        {% if p.age>18 %}
        <p>hello, {{ p.name }}</p>
        {% else %}
        <p>sorry, 您未成年,请在监护人的陪同下使用监护人的账号登陆</p>
        {% endif %}
    {% endfor %}
</body>

  • loop
  • loop.index : 获取当前迭代的次数(从1开始)
  • loop.index0 :从0开始计数(从0开始)
  • loop.revindex : 到循环结束需要迭代的次数(从1开始)
  • loop.revindex0 : 到循环结束需要迭代的次数(从0开始)
  • loop.first : 判断是否是第一个,返回True/False
  • loop.last : 判断是否是最后一个,返回True/False
@app.route('/')
def index():
    d  = [{'name': 'hjk', 'age': 18},
          {'name': 'hjl', 'age': 19},
          {'name': 'hjt', 'age': 12}]
    return render_template('demotest.html', P=d)
<body>
    {% for p in P %}
        <p>{{ loop.first }}</p>
        <p>{{ loop.revindex0 }}</p>
    {% endfor %}
</body>

Categories:   Garfield's Diary

Tags:  ,

Comments