1.渲染模板和控制结构

业务逻辑和表现逻辑

将表现逻辑移到模板中,可以提升程序的可读性。
模板是一个包含响应文本的文件,包含站位变量表示的动态部分。
渲染:使用真实值替换模板中的变量,返回最终得到的响应字符串,这一过程称为渲染。
Flask使用Jinja2作为模板引擎。

简单的两个Jinja2模板:

#templates/index.html:

Hello World!

#templates/user.html:

Hello, {{ name }}!

程序测试:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/usr/')
def usr(name):
    return render_template('user.html', name = name)


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000,debug=True)

可见,render_template的第一个参数是模板的文件名,第二个参数是变量对应的真实值,成为键值对。

谈谈变量:
前面用到的{{ name }}结构表示的变量,是一种特殊的占位符。
Jinja2能识别所有类型的变量,甚至列表、字典和对象。
可以使用过滤器过滤变量:

Hello, {{name|capitalize}}!  #把值的首字母换成大写,其他字母换成小写。

常用的Jinja2变量过滤器。

控制结构:
Jinja2提供了多种控制结构,可以用来改变模板的渲染流程。
几个例子:

#if判断:
{% if usr %}
  Hello,{{ usr }}!
{% else %}
  Hello, Stranger!
{% endif %}

我对这个例子做了一些拓展,可以更好地理解相关内容:

{% if usr == 'Talen' or usr == 'Tale' %}
    Hello,{{ usr }}!
{% else %}
    Hello, Stranger!
{% endif %}

测试程序:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/if/')
def index(usr):
    return render_template('if.html',usr = usr)


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000,debug=True)

假如传入的是Talen或者Tale,则打印会员;否则打印Stranger。

#for循环:
    {% for comment in comments %}
  • {{ comment }}
  • {% endfor %}

测试程序:

#for循环:
    from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): comments = ['Talen','Tale','Tal'] return render_template('for.html',comments = comments) if __name__ == '__main__': app.run(host='0.0.0.0',port=5000,debug=True)

宏:
宏相当于一个函数。我们可以将宏保存在一个单独的文件中,从而达到重复使用的目的。

#宏
{% macro comment(comment) %}
    
  • {{comment}}
  • {% endmacro %}
    #调用宏
    {% import 'macros.html' as macros %}
    
      {% for comment in comments %} {{ macros.comment(comment)}}
    • {% endfor %}

    模板继承,使用flask-bootstrap继承Twitter Bootstrap

    #user.html
    {% extends "bootstrap/base.html" %} 
    
    {%block title %}Flasky{% endblock %}
    
    {% block navbar %}
        
    {% endblock %}
    
    {% block content %}
    
    {% endblock %}
    from flask import Flask, render_template
    from flask.ext.bootstrap import Bootstrap
    
    app = Flask(__name__)
    
    bootstrap = Bootstrap(app)
    
    @app.route('/index')
    def index():
        return render_template('index.html')
    
    @app.route('/usr/')
    def usr(name):
        return render_template('user.html', name = name)
    
    
    if __name__ == '__main__':
    
        app.run(host='0.0.0.0',port=5000,debug=True)
    

    虽然html的那些东西看不太懂,但是总算能出个还可以看的东西。
    慢慢学吧。

    1.渲染模板和控制结构_第1张图片
    微信图片_20170914224456.png

    你可能感兴趣的:(1.渲染模板和控制结构)