zoukankan      html  css  js  c++  java
  • 模板-----控制结构

    根目录下的基础代码 flaskStudy.py

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    args = {
        "sex": "male",
        "addr": "beijing",
        "like": "tea",
        "age": 65
    }
    
    @app.route("/fromuser/<name>")
    def user(name):
        return render_template("user.html", user=name,args=args)
    
    if __name__ == '__main__':
        app.run()
    

      

    条件控制

      在根目录下的templates目录下创建user.html, 内容如下。

    {% if user %}
        hello, {{ user }} !
    {% else %}
        hello, Strange !
    {% endif %}
    

      功能为: 判断user是否存在。

      运行结果

    循环控制

      在user.html中增加如下代码

    <ul>
        {% for arg in args %}
            <li>{{ arg }}</li>
        {% endfor %}
    </ul>
    

      功能: 通过for循环打印user的所有属性。

      运行结果:

      类似python代码中的函数

      1、 在代码中直接编写引用。

    {% if user %}
        hello, {{ user }} !
    {% else %}
        hello, Strange !
    {% endif %}
    
    {% macro render_arg(arg) %}
        <li>{{ arg }}</li>
    {% endmacro %}
    
    {% for arg in args %}
        {{ render_arg(arg) }}
    {% endfor %}
    

      功能: 创建一个宏 render_arg, 在for循环中调用宏。

      运行结果:

     

       2、像python一样, 把宏(函数)保存在单独的文件中, 然后在需要的模块中导入。

      macros.html

    {% macro render_arg(arg) %}
        <li>{{ arg }}</li>
    {% endmacro %}

      user.html

    {% if user %}
        hello, {{ user }} !
    {% else %}
        hello, Strange !
    {% endif %}
    
    {% import 'macros.html' as macros %}
    {% for arg in args %}
        {{ macros.render_arg(arg) }}
    {% endfor %}
    

     

    包含

      应用场景: 有一段代码, 在多处被频繁引用,为了避免多次编辑,可将这段代码存储于一个单独的文件中, 在需要的模块中引用。

      common.html : 存储利用频繁的代码片段

      {% include 'common.html' %}  : 在需要的模块中引用common.html中的代码

      示例:

      common.html

    {% if user %}
        hello, {{ user }} !
    {% else %}
        hello, Strange !
    {% endif %}
    

      user.html

    {% include"common.html" %}
    
    {% import 'macros.html' as macros %}
    {% for arg in args %}
        {{ macros.render_arg(arg) }}
    {% endfor %}
    

      

     模板继承 

      类似于python代码中的类继承。

      base.html  

    <!DOCTYPE html>
    <head>
        {% block header %}
        <title>{% block title %}{% endblock %} - My Application</title>
        {% endblock %}
    </head>
    <body>
        {% block body %}
        {% endblock %}
    </body>
    </html>
    

      jinja2使用block和endblock来定义内容区块,在衍生模板中可覆盖这些定义的区块。

      user.html

    {% extends "base.html" %} 
    
    {% block title %}Index {% endblock %}
    
    {% block header %}
    {{ super()}}
        <style>
        </style>
    {% endblock %}
    

      extends: 声明这个模板衍生自base.html

      同名区块: 基模板中同名区块内容被覆盖。

      supper(): 引用基模板中同区块的内容

      

  • 相关阅读:
    中国年薪 ¥30 万和美国年薪$ 10 万的生活水平异同
    汽车之家CMDB设计思路 – 汽车之家运维团队博客
    平民软件 | 中间件
    FIT2CLOUD
    ZeroBrane Studio
    新炬网络-领先数据资产运营商 | 数据资产管理 | 数据库运维 | 自动化运维
    中国(南京)软件开发者大会
    夏仲璞 | 全球软件开发大会北京站2016
    Nginx下流量拦截算法 | 夏日小草
    docker~dockertoolbox的加速器
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/12986579.html
Copyright © 2011-2022 走看看