美文网首页
1.渲染模板和控制结构

1.渲染模板和控制结构

作者: 郑司令 | 来源:发表于2017-09-14 22:46 被阅读0次

业务逻辑和表现逻辑

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

简单的两个Jinja2模板:

#templates/index.html:

<h1>Hello World!</h1>
#templates/user.html:

<h1>Hello, {{ name }}!</h1>

程序测试:

from flask import Flask, render_template

app = Flask(__name__)

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

@app.route('/usr/<name>')
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/<usr>')
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循环:
<ul>
  {% for comment in comments %}
    <li>{{ comment }}</li>
  {% endfor %}
</ul>

测试程序:

#for循环:
<ul>
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) %}
    <li> {{comment}} </li>
{% endmacro %}
#调用宏
{% import 'macros.html' as macros %}
<ul>
    {% for comment in comments %}
        {{ macros.comment(comment)}}
    <li> {% endfor %} </li>
</ul>

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

#user.html
{% extends "bootstrap/base.html" %} 

{%block title %}Flasky{% endblock %}

{% block navbar %}
    <div class = "navbar navbar-inverse" role = "navigation">
        <div class = "container">
            <div class = "navbar-header">
                <button type = "button" class = "navbar-toggle"
                data-toggle = "collapse" data-target - ".navbar-collapse">
                <span class = "sr-only">Toggle navigation</span>
                <span class = "icon-bar"></span>
                <span class = "icon-bar"></span>
                <span class = "icon-bar"></span>
            </button>
            <a class = "navbar-brand" href = "/">Flasky</a>
        </div>
        <div class = "navbar-collapse collapse">
            <ul class = "nav navbar-nav">
                <li><a href = "/">Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class = "container">
    <div class = "page-header">
        <h1>Hello, {{ name }}!</h1>
    </div>
</div>
{% 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/<name>')
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的那些东西看不太懂,但是总算能出个还可以看的东西。
慢慢学吧。

微信图片_20170914224456.png

相关文章

  • 1.渲染模板和控制结构

    业务逻辑和表现逻辑 将表现逻辑移到模板中,可以提升程序的可读性。模板是一个包含响应文本的文件,包含站位变量表示的动...

  • Python flask 学习笔记(二)

    模板引擎 模板渲染 变量 流程控制 1. 模板渲染 Jinja2 模板引擎 页面渲染流程 一个简单的例子: 2. ...

  • Flask Web 开发 Chapter3 - 模板

    Jinja2模板引擎 最简单的模版: 渲染模板: 变量与控制结构 Jinja2提供变量,用{{ name }}包裹...

  • Flask渲染Jinja2模板和传参

    ### Flask渲染Jinja2模板和传参: 1. 如何渲染模板: * 模板放在`templates`文件夹下 ...

  • 4,流程控制和变量

    控制结构(模板说法中称为“动作”)提供了控制模板生成流程的能力。Helm的模板语言提供了以下控制结构: if el...

  • Vue.js常用指令

    (一)vue常用的指令 1.数据渲染:v-text、v-html、{{}} 2.条件渲染 控制模板隐藏:v-sho...

  • 04-flask模板

    四、 模板 概念 模板语法 条件控制if 遍历for 结构标签 block 结构标签 extends 结构标签 i...

  • Flask jinja2模板

    Python Flask JIJIA2模板渲染 A.Flask渲染Jinja2模板和模板传参 如何渲染模板:Fla...

  • 模板(View)

    后端渲染 1.模板的配置和渲染函数 2.模板遇到变量名的查找顺序。 字典查找(如:foo['bar']) 属性查找...

  • thinkphp5学习笔记(六)视图

    在控制器中使用视图的三种方法 模板引擎的配置 模板赋值的五种方法 视图渲染方法 模板输出替换 变量输出 模板布局和...

网友评论

      本文标题:1.渲染模板和控制结构

      本文链接:https://www.haomeiwen.com/subject/ltkdsxtx.html