VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 带你认识 flask 的模板(3)

条件语句

在渲染过程中使用实际值替换占位符,只是Jinja2在模板文件中支持的诸多强大操作之一。模板也支持在{%...%}块内使用控制语句。 index.html模板的下一个版本添加了一个条件语句:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
<html>    <head>        {% if title %}        <title>{{ title }} - Microblog</title>        {% else %}        <title>Welcome to Microblog!</title>        {% endif %}    </head>    <body>        <h1>Hello, {{ user.username }}!</h1>    </body></html>

现在,模板变得聪明点儿了,如果视图函数忘记给渲染函数传入一个名为title的关键字参数,那么模板将显示一个默认的标题,而不是显示一个空的标题。你可以通过在视图函数的render_template()调用中去除title参数来试试这个条件语句是如何生效的。

循环

登录后的用户可能想要在主页上查看其他用户的最新动态,针对这个需求,我现在要做的是丰富这个应用来满足它。

我将会故技重施,使用模拟对象的把戏来创建一些模拟用户和动态:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
from flask import render_templatefrom app import app@app.route('/')@app.route('/index')def index():    user = {'username': 'Miguel'}    posts = [        {            'author': {'username': 'John'},            'body': 'Beautiful day in Portland!'        },        {            'author': {'username': 'Susan'},            'body': 'The Avengers movie was so cool!'        }    ]    return render_template('index.html', title='Home', user=user, posts=posts)

 

我使用了一个列表来表示用户动态,其中每个元素是一个具有authorbody字段的字典。未来设计用户和其动态时,我将尽可能地保留这些字段名称,以便在使用真实用户和其动态的时候不会出现问题。

在模板方面,我必须解决一个新问题。用户动态列表拥有的元素数量由视图函数决定。那么模板不能对有多少个用户动态进行任何假设,因此需要准备好以通用方式渲染任意数量的用户动态。

Jinja2提供了for控制结构来应对这类问题:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
<html>    <head>        {% if title %}        <title>{{ title }} - Microblog</title>        {% else %}        <title>Welcome to Microblog</title>        {% endif %}    </head>    <body>        <h1>Hi, {{ user.username }}!</h1>        {% for post in posts %}        <div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div>        {% endfor %}    </body></html>

 


相关教程