美文网首页PythonWeb 开发Python学习
Flask Web开发学习笔记(二)

Flask Web开发学习笔记(二)

作者: iYiming | 来源:发表于2015-03-17 23:43 被阅读7510次

    本篇文章主要介绍模板的使用。

    0.什么是模板

    上篇敲的代码,业务逻辑和界面逻辑混杂在一块,不好理解和维护。为了让业务逻辑和界面逻辑分开,引入了模板这一概念。

    模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。

    渲染:使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。

    为了渲染模板,Flask使用了一个名为Jinja2的强大模块引擎。

    1.举个简单栗子

    0.前提

    创建虚拟环境
    激活虚拟环境
    安装flask

    1.创建一个app.py文件,写入:

    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    @app.route('/user/<name>')
    def user(name):
    return render_template('user.html',user=name)
    
    if __name__ == '__main__':
    app.run(debug=True)
    

    解释下:

    from flask import Flask,render_template 这句话,除了引入了Flask,还引入了 render_template

    Flask 提供的 render_template 函数把 Jinja2 模板集成到了程序中。

    render_template 函数,第1个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。

    render_template('user.html',user=name) user.html表示模板文件名,第2个参数:user=nameuser表示模板中的变量,name表示当前函数user(name)参数。

    2.在app.py文件下创建同级别的templates文件夹

    这里需要注明下必须是templates文件夹。默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。

    3.在templates文件夹下创建user.html,写入:

    {% if user %}
    <h1>Hello {{ user }}!</h1>
    {% else %}
    <h1>Hello stranger!</h1>
    {% endif %}
    
    

    解释下:

    {{ user }}结构表示一个变量,它是一个特殊的占位符,告诉模板引擎这个位置的值从渲染。

    {% if user %}结构,我理解的时表示一种逻辑,记住除了变量{{name}}外都用这个。

    4.运行

    python app.py
    

    在浏览器中输入:http://localhost:5000/user/Tom,得到结果:Hello Tom!

    2.控制结构

    0.if else控制结构

    {% if user %}
    <h1>Hello {{ user }}!</h1>
    {% else %}
    <h1>Hello stranger!</h1>
    {% endif %}
    

    1.for循环

    <ul>
    {% for name in names %}
    <li>{{ name }}</li>
    {% endfor %}
    </ul>
    

    解释下:

    names是个数组变量如:[tom,sam,jim]

    2.宏

    {% macro render_name(name) %}
    <li>{{ name }}</li>
    {% endmacro %}
    
    <ul>
    {% for name in names %}
    {{ render_name(name) }}
    {% endfor %}
    </ul>
    

    解释下:

    什么是宏,听起来挺吓人的。这里的宏类似于Python代码中的函数。

    {% macro render_name(name) %}定义一个render_name

    {{ render_name(name) }}调用这个宏 注意是{{ }}结构

    3.模板继承

    先看下代码:

    0.创建一个base.html

    <html>
    <head>
    {% block head %}
    <title>{% block title %}{% endblock %} —— 一个简单Demo</title>
    {% endblock  %}
    </head>
    <body>
    {% block body %}{% endblock %}
    </body>
    </html>
    

    1.创建一个page.html 继承 base.html

    {% extends 'base.html' %}
    {% block title %} 测试下 {% endblock  %}
    {% block head %}
    {{ super()  }}
    <style></style>
    {% endblock %}
    {% block body  %}
    <h1>hello world</h1>
    {% endblock %}
    
    

    解释下:

    什么是模板继承?它类似于Python代码中的类继承。

    base.html 为基模板。定义了名为head、title和body的块。注意,title包含在head中。

    page.html 为衍生模板。{% extends 'base.html' %}衍生自base.html

    注意定义的head块,在基模板中其内容不是空的,所以使用```{{ super() }}``获取原先的内容。

    OK,这就是所谓的模板。说些题外话:学习一门语言,自认为会默写就OK啦,这和将学到的东西整理成一篇文章,完全是两码事。

    相关文章

      网友评论

      • 79c84aa822fe:感恩的心~
      • Michael翔:{% block head %}{%endblock%}作用是什么呢?
        安池99:是为了给子类添加自己特有的内容准备的,将多个子类相同的部分抽象出来,写成一个父类,由子类继承,对于不同的部分,在父类中定义块block,然后在子类中填写具体内容
        Aosz1o:@Michael_翔_ 子类的block head没用,去除后依然可以继承基类的head的内容

      本文标题:Flask Web开发学习笔记(二)

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