zoukankan      html  css  js  c++  java
  • 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知道如何将这两个模板合并成在一起。

  • 相关阅读:
    How to extend MySQLInnoDBDialect?
    Hibernate Session
    org/apache/xerces/xni/parser/XMLConfigurationException
    Hibernate.xml
    Oracle自带的sql developer导入导出数据 java程序员
    c#的DateTime.Now函数详解 java程序员
    [转]随着个性化数据带来的价值,为什么不销售你自己的数据?惠普实验室告诉你如何完成 java程序员
    [原]怎样在Eclipse中看到Android源码API java程序员
    HTML5的未来 HTML5 还能走多远? java程序员
    帮助你开发基于HTML5的网站原型页面 HTML5 Bones java程序员
  • 原文地址:https://www.cnblogs.com/mark-zh/p/10451882.html
Copyright © 2011-2022 走看看