当前位置 主页 > 网站技术 > 代码类 >

    flask框架渲染Jinja模板与传入模板变量操作详解

    栏目:代码类 时间:2020-01-25 15:10

    本文实例讲述了flask框架渲染Jinja模板与传入模板变量操作。分享给大家供大家参考,具体如下:

    1. 模板简介

    模板是一个web开发中必备的模块,因为我们在渲染一个网页的时候,并不只是渲染了一个纯文本字符窜,而是渲染一个有富文本标签的页面,这个时候我们就需要用到模板了。在flask中,配套的模板是Jinja2,Jinja2的作者也是flask的作者。

    2. flask中渲染模板

    在flask中,如果我们需要渲染一个模板,那么我们就需要用到render_template这个方法了。

    在我们新建一个flask项目的时候,会同时生成一个templates的文件夹,然后我们就在里面新建一个index.html的文件。然后写入测试代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>index</title>
    </head>
    <body>
     <h1>index</h1>
    </body>
    </html>
    
    

    然后我们在app.py文件中写一个视图函数渲染我们的index.html文件。

    from flask import render_template
    @app.route('/index/')
    def index():
      return render_template('index.html')
    
    

    这样,我们就成功的对html页面进行了渲染。然后我们运行项目,输入网址就能够查看到效果了。

    3. flask中模板文件查找路径

    在上面的render_template函数中,为什么我们直接写入index.html,flask就会知道去templates文件夹里面去找这个文件呢。而不是去其他位置查找index.html文件呢。这是因为在flask中,默认的查找模板路劲就在项目的根目录下面的templates文件夹。所以当我们写模板文件的时候,都会写在templates下面。

    在flask中,我们也是可以修改模板的存放位置的,比如我们将模板文件存放位置修改为E:\templates,那么我们就可以这样写。

    from flask import Flask,render_template
    app = Flask(__name__,template_folder=r'E:\templates')
    
    

    这样,flask每次查找模板文件路径的时候,就回去这个文件夹下面寻找,如果没有找到,就会报一个jinja2.exceptions.TemplateNotFound的错误,所以,当我们遇到了这个错误的时候,我们就要知道是哪个位置出问题了。

    4. 模板中传入参数

    在一个模板中,我们不可避免的会传入一些参数,那么在flask中,应该怎样闯入参数呢。

    首先编写一个视图,然后在render_template中传入一个关键字参数,例如下面的username=‘xxx'

    from flask import render_template
    @app.route('/index/')
    def index():
      return render_template('index.html',username='xxx')
    
    

    然后我们在模板中怎样使用这个变量呢?我们在index.html中写入以下代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>index</title>
    </head>
    <body>
     <h1>index</h1>
     <p>userneme: {{ username }}</p>
    </body>
    </html>
    
    

    所以,我们在模板中通过 {{ username }}就可以拿到我们冲视图中传入的值了。也就是说,在Jinja2模板中,是通过{{ 变量名 }}来获取数据的,如果我们在{{ }}中传入了一个视图并没有穿给我们的变量,那么也不会报错,只是什么都不显示而已。

    如果我们需要传入多个参数,只需要依次在render_template函数中传入我们的关键之参数就可以了。
    示例:

    return render_template('index.html',username='xxx',age=18,...)