在Flask中使用Jinjia2

2024-06-23 1451阅读

目录

一.模版引擎

在Flask中使用Jinjia2
(图片来源网络,侵删)

1.1什么是模板

1.2什么是Jinja2

1.3什么是模板渲染

二.Jinja2语法

2.1传递一个参数

2.2传递列表型参数

2.3传递所有参数

2.4分隔符

 2.5if

2.6for

2.7set

2.8with

三.模版插入与模版继承

3.1include模版插入

3.2extends模版继承

一.模版引擎

Flask使用Jinja2引擎来渲染模版

1.1什么是模板

简单来说,在web应用开发中,为了实现前后端的解耦,分离前后端逻辑,就可以将表现逻辑分离出来交由模板通过模板引擎来实现。

其实模板就是包含静态与动态内容的网页内容。

1.2什么是Jinja2

Jinja2是一种现代的、对设计人员友好的Python模板语言。具有快速、广泛使用和安全的特性。

1.3什么是模板渲染

所谓渲染,其实就是向网页中加载静态内容及动态内容值的过程。

二.Jinja2语法

2.1传递一个参数

app.py:

@app.route('/')
def hello_world():
    content = "首页内容"
    return render_template('index.html', content=content)

index.html:

    

{{ content }}

  • 通过{{ var }}使用传来的参数值

    2.2传递列表型参数

    app.py:

    @app.route('/')
    def hello_world():
        content = ["1","2","3","4","5"]
        return render_template('index.html', content=content)

    index.html:

        
        {{ title }}
    
    
        {{% for item in content %}}
            

    {{item}}

    {{% endfor %}}

    2.3传递所有参数

    @app.route('/')
    def hello_world():
        title = "首页"
        content = "首页内容"
        return render_template('index.html', **locals())
    
    • 使用**locals()将所有参数传递给了模板,然后选择性使用

      2.4分隔符

      {{ var }}是不同于html原生语法的东西

      {{}}叫分隔符,Jinja2中的分隔符有好几个:

      {% ..... %} 用于声明

      {{ .... }} 用于打印表达式,使用变量等

      { # .... # } 用于模版注释

      # .... ## 对语法的简化

       2.5if

      模板语法:

      {% if condition %}
          do something
      {% elif condition %}
          do something
      {% else %}
          do something
      {% endif %}

      2.6for

      模板语法:

      {% for item in iteratable %}
          do something
      {% endfor %}

      2.7set

      set用于在模版中设置变量,直接在set中定义代码的变量,如果不用with修饰,默认是全局变量。

      {% set name = '鞠婧祎' %}
      {{name}}

      2.8with

      with用于创建一个局部作用域,在这个局部作用域使用set定义的变量仅在with中有效,不会污染全局

      {% with %}
          {% set name = '鞠婧祎' %}
          {{name}}
      {% endwith %}

      上面的set也可以直接写进with中,格式如下:

      {% with name = '鞠婧祎' %}
          {{name}}
      {% endwith %}

      三.模版插入与模版继承

      3.1include模版插入

      include用于向某个HTML指定位置中插入一个模板

      PS:“include只能插入,不能修改插入的内容!!”

      模板语法:

      {% include  template_name%}

       例如:

      header.html:

      
      
          My Website
      
      
          
              

      Welcome to My Website

      footer.html:

          
              

      © 2024 My Website

      index.html:

      {% include 'header.html' %}
      
          

      This is the content of the homepage.

      {% include 'footer.html' %}

      可以看到,include只能插入一个模板,并不能对模板进行选择性的修改,因此局限性较大

      3.2extends模版继承

      extends用于实现模板继承,子模板可以继承父模板的内容,并且可以修改。

      在使用extends时,可以使用block指令来圈选子模板可以修改的范围。

      base.html(父模板):

      
      
          {% block title %}My Website{% endblock %}
      
      
          {% block content %}{% endblock %}
          
              

      © 2024 My Website

      home.html(子模板):

      {% extends 'base.html' %}
      {% block title %}Homepage - My Website{% endblock %}
      {% block content %}
          
              

      Welcome to My Website

      This is the content of the homepage.

      {% endblock %}
      • 如果我们想修改父模板的内容,且想保留父模板的内容,可以使用:“{{ super() }}”来保留父模板内容
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]