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知道如何将这两个模板合并成在一起。

  • 相关阅读:
    Enterprise Library 企业库 V4.1
    跨域实现IFRAME自适应高度
    微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建
    微软企业库4.1学习笔记(三)企业库迁移和并行使用,以及企业库的扩展
    微软企业库4.1学习笔记(五)对象创建和依赖注入方法
    判断 iframe 是否加载完成的完美方法
    对JavaScript调用堆栈和setTimeout用法的深入研究
    工作流技术杂谈
    企业流程管理平台V2.0介绍(.NET平台下的工作流)
    c#操作oracle lob字段[转自 芽芽的回收站]
  • 原文地址:https://www.cnblogs.com/mark-zh/p/10451882.html
Copyright © 2011-2022 走看看