• Python Flask学习笔记之模板


    Python Flask学习笔记之模板

    Jinja2模板引擎

    默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板。Flask提供的render_template函数把Jinja2模板引擎集成到了程序中。

    渲染模板

    创建文件夹

    mkdir  app/templates
    

    改写代码

    # routes.py
    from flask import render_template
    from app import app
    
    @app.route('/')
    @app.route('/index')
    def index():
        return "Hello, World!"
    @app.route('/user/<name>')
    def user(name):
        return '<h1>Hello, %s</h1>' % name
    @app.route('/template')
    def template_test():
        user = {'username':'Mark'}
        return render_template('template.html',user=user)
    

    变量

    # template.html
    <h1>Hello, {{ user.username }}!</h1>
    

    访问http://127.0.0.1:5000/template,显示Hello, Mark!

    控制结构

    • 条件控制语句
    {% if user %}
        Hello, {{ user }}
    {% else %}
        Hello, Stranger!
    {% endif %}
    
    • for循环
    <ul>
        {% for comment in comment %}
            <li>{{ comment }}</li>
        {% endfor %}
    </ul>
    
    • 宏,类似Python代码中的函数
    {% macro render_comment(comment) %}
        <li>{{ comment }}</li>
    {% endmacro %}
    
    <ul>
        {% for comment in comments %}
            {{ render_comment(comment)}}
        {% endfor %}
    </ul>
    

    为了重复使用宏,可以将其保存在单独的文件中,然后在需要使用的模板中导入

    {% import 'macros.html' as macros %}
    <ul>
        {% for comment in comments %}
            {{ render_comment(comment)}}
        {% endfor %}
    </ul>
    
    • 继承
    # base.html
    <!DOCTYPE html>
    <html>
    <head>
        {% if title %}
        <title>{{ title }} - mark</title>
        {% else %}
        <title>welcome to mark's blog</title>
        {% endif %}
    </head>
    <body>
        <div>mark's blog <a href="/index">Home</a></div>
        <hr>
        {% block content %}{% endblock %}
    </body>
    </html>
    # index.html
    {% extends "base.html"%}
    
    {% block content %}
        <h1>Hi, {{ user.username }}!</h1>
        {% for post in posts %}
        <div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div>
        {% endfor %}
    {% endblock %}
    

    block控制语句用来定义派生模板可以插入代码的位置。 block被赋予一个唯一的名称,派生的模板可以在提供其内容时进行引用。extends语句用来建立了两个模板之间的继承关系,这样Jinja2才知道当要求呈现index.html时,需要将其嵌入到base.html中。 而两个模板中匹配的block语句和其名称content,让Jinja2知道如何将这两个模板合并成在一起。

  • 相关阅读:
    python高级编程
    django笔记
    sublime ide
    python3 django mysql
    python win
    linux时区设置
    在实际应用中如何实现切圆角的功能
    display和visiblity在应用中使用哪个好
    看懂UML类图和时序图
    解决Xcode7.2真机调试出现:The account “” has no team with ID “”
  • 原文地址:https://www.cnblogs.com/mark-zh/p/10451882.html
Copyright © 2020-2023  润新知