modelo usando os fake objects sem ter que nos preocupar com atualizacao quando migrarmos para o banco de dados.No lado do template temos que resolver um problema novo. A matriz pode ter qualquer numero de elementos. Cabera a view decidir a quantidade de mensagens a serem apresentadas. O template nao pode fazer quaisquer suposicoes sobre o numero de posts. Por isso, precisa estar preparado para renderizar tantos posts quanto a view envia.Entao vamos ver como fazer isso usando uma estrutura de controle for (arquivo 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>Simples, nao? Teste a aplicacao e nao se esqueca de brincar com a adicao de conteudo na matriz de mensagens.HerancaTemos mais um topico para cobrir antes de encerrar por hoje.Nosso microblog web precisa ter uma barra de navegacao no topo da pagina com alguns links. Nela deve ter um link para editar o perfil do usuario, fazer logout, etc.Nos podemos adicionar uma barra de navegacao no nosso template index.html, mas conforme nossa aplicacao cresce, vai precisar de mais templates e esta barra de navegacao tera de ser copiada para todos eles. Entao, voce sempre tera que manter todas estas copias sincronizadas, o que podera tornar-se muito trabalhoso se voce tem muitos templates.Em vez disso, podemos utilizar o recurso de heranca de templates do Jinja2. O que nos permite mover as partes do layout de pagina, que sao comuns a todos os templates e coloca-los em um template base, a partir da qual todos os outros templates sao derivados.Portanto, vamos criar um template base que inclui a barra de navegacao e tambem o pouco de logica do titulo que implementamos anteriormente (arquivo app/templates/base.html):<html> <head> {% if title %} <title>{{title}} - microblog</title> {% else %} <title>microblog</title> {% endif %} </head> <body> <div>Microblog: <a href="/index">Home</a></div> <hr> {% block content %}{% endblock %} </body></html>Neste template, utilizamos a declaracao de controle 'block' para definir o lugar onde os modelos derivados poderao inserir-se. Blocos recebem nomes unicos.E agora o que resta a fazer e modificar o nosso template index.html para herdar de base.html (arquivo app/templates/index.html):{% extends "base.html" %}{% block content %}<h1>Hi, {{user.nickname}}!</h1>{% for post in posts %}<div><p>{{post.author.nickname}} says: <b>{{post.body}}</b></p></div>{% endfor %}{% endblock %}Uma vez que o template base.html ira tomar conta da estrutura geral da pagina, tais elementos foram removidos do presente template, ficando apenas a parte do conteudo. O bloco 'extends' estabelece o elo de heranca entre os dois templates para que o Jinja2 saiba que, quando precisar renderizar o index.html, precisara inclui-lo dentro de base.html. Os dois templates tem blocos correspondentes com o nome 'content' e e assim que Jinja2 sabe como combinar os dois em um. Quando nos comecarmos a escrever novos templates tambem vamos cria-los como extensoes para base.html.Ultimas PalavrasSe voce quiser economizar tempo, a aplicacao microblog em seu estado atual esta disponivel aqui:Download microblog-0.2.zip.Observe que o arquivo zip nao inclui o ambiente virtual flask e voce tera que cria-lo seguindo as instrucoes descritas no primeiro capitulo da