flask学习笔记-模板和条件语句

继续使用上一节的模板,模板如下:

microblog\
  venv\
  app\
    __init__.py
    routes.py
  microblog.py

本节主要是记录,模板的使用和条件语句,循环的的使用


1. 模板的使用

在使用模板之前需要创建一个存储模板的目录,在app的目录下创建一个templates文件夹,在文件app/templates/index.html中写入以下代码

index.html


    
        {{ title }} - Microblog
    
    
        

Hello, {{ user.username }}!

routes.py

from flask import render_template
from app import app

@app.route('/')
@app.route('/index')
def index():
    user = {'username': 'Miguel'}
    return render_template('index.html', title='Home', user=user)

在routes.py中用到了,render_template() 函数,作用是把函数中含有的参数替换成模板中的{{…}}

也就是在渲染的过程中用实际值来替换占位符

2. if语句

模板也支持在{%…%}块内使用控制语句,模板index.html的下一个版本添加一条if语句


    
        {% if title %}
        {{ title }} - Microblog
        {% else %}
        Welcome to Microblog!
        {% endif %}
    
    
        

Hello, {{ user.username }}!

if语句的使用

{% if something %}
...
{% else %}
...
{% endif %}

在if语句中,必须有endif来进行结束,else可以没有

3. for循环

for语句的使用

{% for item in items %}
    #输出或使用item,做一些操作
{% endfor %}

routes.py中视图函数index更新

from flask import render_template
from 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)

index.html中使用for循环来更新posts中的值


    
        {% if title %}
        {{ title }} - Microblog
        {% else %}
        Welcome to Microblog
        {% endif %}
    
    
        

Hi, {{ user.username }}!

{% for post in posts %}

{{ post.author.username }} says: {{ post.body }}

{% endfor %}

4. 模板的继承

app/templates/base.html


    
      {% if title %}
      {{ title }} - Microblog
      {% else %}
      Welcome to Microblog
      {% endif %}
    
    
        
Microblog: Home

{% block content %}{% endblock %}

block控制语句定义了派生模板可以插入代码的位置。block被赋予了一个唯一的名称,派生的模板可以在提供其内容时进行引用
简化后的index.html

{% extends "base.html" %}

{% block content %}
    

Hi, {{ user.username }}!

{% for post in posts %}

{{ post.author.username }} says: {{ post.body }}

{% endfor %} {% endblock %}

使用extends语句建立了两个模板之间的关系,引用了base.html,block插入代码块,这样就可以不用重复的写代码了


此时的项目结构图

microblog\
  templates/
    index.html
    base.html
  venv\
  app\
    __init__.py
    routes.py
  microblog.py

你可能感兴趣的:(flask)