flask教程

何必呢

来自: 何必呢(来之不易 愈加珍惜 拯救自己) 2016-11-14 12:38:27

  • 何必呢

    何必呢 (来之不易 愈加珍惜 拯救自己) 2016-11-14 12:41:46

    模板继承¶
    在这一章结束前我们将讨论最后一个话题。

    在我们的 microblog 应用程序中,在页面的顶部需要一个导航栏。在导航栏里面有编辑账号,登出等等的链接。

    我们可以在 index.html 模板中添加一个导航栏,但是随着应用的扩展,越来越多的模板需要这个导航栏,我们需要在每一个模板中复制这个导航栏。然而你必须要保证每一个导航栏都要同步,如果你有大量的模板,这需要花费很大的力气。

    相反,我们可以利用 Jinja2 的模板继承的特点,这允许我们把所有模板公共的部分移除出页面的布局,接着把它们放在一个基础模板中,所有使用它的模板可以导入该基础模板。

    所以让我们定义一个基础模板,该模板包含导航栏以及上面谈论的标题(文件 app/templates/base.html):

  • 何必呢

    何必呢 (来之不易 愈加珍惜 拯救自己) 2016-11-14 12:44:53

    在这个模板中,我们使用 block 控制语句来定义派生模板可以插入的地方。块被赋予唯一的名字。

    接着现在剩下的就是修改我们的 index.html 模板继承自 base.html (文件 app/templates/index.html):

  • 何必呢

    何必呢 (来之不易 愈加珍惜 拯救自己) 2016-11-14 13:24:00

    http://docs.jinkan.org/docs/flask/tutorial/views.html

  • 何必呢
  • 何必呢

    何必呢 (来之不易 愈加珍惜 拯救自己) 2016-11-15 17:20:51

    模板中的循环语句
    在我们 microblog 应用程序中,登录的用户想要在首页展示他的或者她的联系人列表中用户最近的文章,因此让我们看看如何才能做到。

    首先我们先创建一些用户以及他们的文章用来展示(文件 app/views.py):

    def index():
    user = { 'nickname': 'Miguel' } # fake user
    posts = [ # fake array of posts
    {
    'author': { 'nickname': 'John' },
    'body': 'Beautiful day in Portland!'
    },
    {
    'author': { 'nickname': 'Susan' },
    'body': 'The Avengers movie was so cool!'
    }
    ]
    return render_template("index.html",
    title = 'Home',
    user = user,
    posts = posts)
    为了表示用户的文章,我们使用了列表,其中每一个元素包含 author 和 body 字段。当我们使用真正的数据库的时候,我们会保留这些字段的名称,因此我们在设计以及测试模板的时候尽管使用的是假冒的对象,但不必担心迁移到数据库上更新模板。

    在模板这一方面,我们必须解决一个新问题。列表中可能有许多元素,多少篇文章被展示将取决于视图函数。模板不会假设有多少文章,因此它必须准备渲染视图传送的文章数量。

    因此让我们来看看怎么使用 for 来做到这一点(文件 app/templates/index.html):

    <html>
    <head>
    {% if title %}
    <title>{{title}} - microblog</title>
    {% else %}
    <title>microblog</title>
    {% endif %}
    </head>
    <body>
    <h1>Hi, {{user.nickname}}!</h1>
    {% for post in posts %}
    <p>{{post.author.nickname}} says: <b>{{post.body}}</b></p>
    {% endfor %}
    </body>
    </html>
    简单吧?试试吧,确保给予足够的文章列表。

你的回应

回应请先 , 或 注册

49 人聚集在这个小组

最新话题  ( 更多 )

↑回顶部