• Flask架站基础篇(五)----Jinja2模板


    零、使用模板

    #引入render_template
    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        #调用render_template,传递模板名称
        return render_template('index.html')
    
    if __name__ == '__main__':
        app.run(debug=True)

    一、视图函数给模板传参

    方法一:如果参数较少的情况下可使用如下方法:

    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        #给render_template传递模板页所需的参数
        return render_template('index.html',username='admin')
    
    if __name__ == '__main__':
        app.run(debug=True)

    方法二:如果参数较多使用如下方法

    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        context={
            'username':'admin',
            'gender':'男',
            'age':18
        }
        #给render_template 传递一个字典/列表/模型
        return render_template('index.html',**context)
    
    if __name__ == '__main__':
        app.run(debug=True)

    模板页接收方法:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        这是HTML模板中出现的文字
        <p>用户名:{{ username }}</p>
        <p>性别:{{ gender }}</p>
        <p>年龄:{{ age }}</p>
    </body>
    </html>

    二、模板访问模型和字典

    方法如下代码

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        class Person(object):
            name = 'admin123'
            age = 18
    
        p = Person();
        #将模型传递给字典
        context = {
            'username': 'admin',
            'gender': '男',
            'age': 18,
            'person': p,
            'websites': {
                'baidu': 'baidu.com'
            }
        }
        return render_template('index.html', **context)
    
    if __name__ == '__main__':
        app.run(debug=True)
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        这是HTML模板中出现的文字
        <p>用户名:{{ username }}</p>
        <p>性别:{{ gender }}</p>
        <p>年龄:{{ age }}</p>
        <hr>
        <!--调用字典/模型,都可以用以下的方法
        也可以使用如:person['name']这样的方法-->
        <p>用户名:{{ person.name }}</p>
        <p>年龄:{{ person.age }}</p>
        <p>网站:{{ websites.baidu }}</p>
    </body>
    </html>

    三、模板页使用python代码

    语法如下:

    {% python代码开始 %}
    html代码
    {% python代码结束 %}

    示例如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        {% if user.age>18%}
            <a>我是{{user.name}}</a>
        {% endif %}
    </body>
    </html>

    四、过滤器

    过滤器作用于模板中的变量
    语法:

    {{ 变量 | 过滤器名称 }}

    五、母版页

    在“templates”文件夹下创建一个html文件作为母版页,在使用该页面的html文件中引入该文件,引入方式如下:

    {% extends 'base.html' %}

    在子模版中自定义内容方法:
    1. 在母版页中使用block,代码如下:

    {% block main %}
    {% endblock %}
    1. 在子模版页中使用模板也定义的block,代码如下
    {% block main %}
        子模版自定义内容
    {% endblock %}
  • 相关阅读:
    BZOJ1588:[HNOI2002]营业额统计——题解
    POJ2079:Triangle——题解
    POJ3384:Feng Shui——题解
    POJ3525:Most Distant Point from the Sea——题解
    POJ1279:Art Gallery——题解
    重大改革!Python,最接近人工智能的语言~将被加入高考科目!
    滴滴招聘-各类测试人才
    DJI大疆创新招聘-自动化测试工程师
    自动化测试ROI实践
    自动化测试ROI实践
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778266.html
Copyright © 2020-2023  润新知