zoukankan      html  css  js  c++  java
  • flask框架下的jinja2模板引擎(3)(模板继承与可以在模板使用的变量、方法)

    flask 框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html

    flask 框架下的jinja2模块引擎(2):https://www.cnblogs.com/chichung/p/9775099.html

    本文主要记录下 jinja2 的模板继承。

    • 模板继承是什么?

    在模板中,可能会遇到以下情况:

    • 多个模板具有完全相同的顶部和底部内容
    • 多个模板中具有相同的模板代码内容,但是内容中部分值不一样
    • 多个模板中具有完全相同的 html 代码块内容

    像遇到这种情况,可以使用 JinJa2 模板中的 继承 来进行实现

    模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

    • 相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。
    • 子模板使用 extends 指令声明这个模板继承自哪个模板
    • 父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()
       
    • 模板继承的使用

    例如有一个父模板 base.html 。有两个子模板01.html 和 02.html 都是继承该模板的某一部分。

    base.html 如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Title{% endblock title %}</title>
    </head>
    <body>
        <p>父模板的头部,每个网页都一样的,不需要更改</p>
        {% block content %}
        <p>父模板的中间部分,每个网页都不一样的,需要更改</p>
        {% endblock content %}
        <p>父模板的脚部,每个网页都一样的,不需要更改</p>
    </body>
    </html>

    {% block xxx %} 与 {% endblock xxx %} 的中间可以进行替换。而其他的内容可以继承。模板继承可以极大地提高开发效率。

    01.html 如下:

    {% extends "base.html" %}
    {% block title %}
    <p>01的标题</p>
    {% endblock title  %}
    {% block content %}
    <p>01页面独有的内容</p>
    {% endblock content %}

    02.html 如下:

    {% extends "base.html" %}
    {% block title %}
    <p>02的标题</p>
    {% endblock title  %}
    {% block content %}
    <p>02页面独有的内容</p>
    {% endblock content %}
    • 模板中可以使用的变量和函数

    1. config

    你可以从模板中直接访问Flask当前的config对象:

    {{config.SQLALCHEMY_DATABASE_URI}}
    sqlite:///database.db

    2. request

    就是flask中代表当前请求的request对象:

    {{request.url}}
    http://127.0.0.1

    3. session

    为Flask的session对象

    {{session.new}}
    True

    4. g变量

    在视图函数中设置g变量的 name 属性的值,然后在模板中直接可以取出

    {{ g.name }}

    5.url_for()

    url_for会根据传入的路由器函数名,返回该路由对应的URL,在模板中始终使用url_for()就可以安全的修改路由绑定的URL,则不比担心模板中渲染出错的链接:

    {{url_for('home')}}
    /

    如果我们定义的路由URL是带有参数的,则可以把它们作为关键字参数传入url_for(),Flask会把他们填充进最终生成的URL中:

    {{ url_for('post', post_id=1)}}
    /post/1
  • 相关阅读:
    docker PXC MYSQL集群节点启动失败/节点顺序消失/只剩一个节点存在问题的解决
    springgateway
    rabbitMQ重复消费(结合死循环重发那一篇看)
    rabbitMq可靠性投递之手动ACK
    3表查询,1:多:多,根据1查多再查多
    tp后台注册登录配置项
    volist/foreach下,点击循环中的一个进行操作
    生成随机订单号
    省市县的下拉列表
    银行下拉列表
  • 原文地址:https://www.cnblogs.com/chichung/p/9775192.html
Copyright © 2011-2022 走看看