接上文

模板继承

Jinji2中的模板继承是jinjia2比较强大的功能之一。

模板继承可以定义一个父级公共的模板,把同一类的模板框架定义出来共享。

这样做一方面可以提取共享代码,减少代码冗余和重复的工作量

另一方面,对于后期的维护和管理也非常方便。

一个根模板(或叫基模板)主要有三部分组成:

  一是公共的js,css等资源文件的引用,

  二是定义好一个布局框架,

  三是定义子模板可以重写的部分(block)

下面我们以一个例子来说明模板继承的使用方法

  1. 创建一个基模板

选中templates文件夹,右键选择新建->HTML文件

在弹出的窗口中输入要创建的文件名:base.html,

点击确定

然后把下面的代码copy到base.html中

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html lang="en">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <link rel="stylesheet" href="{{ url_for('static',filename='style.css') }}" />

    {% block head %}

    <title>{% block title %}{% endblock %} - My Webpage</title>

    {% endblock %}

</head>

<body>

    <div id="content">{% block content %}{% endblock %}</div>

    <div id="footer">

        {% block footer %}

        &copy;Copyright 2018

        {% endblock %}

    </div>

</body>

在这个基模板中,可以看到定义了4个block,每个个block就是告诉子模板,可以重写这些block中的内容

在同一个模板中不能定义同名的block

注意在static文件夹中添加style.css文件:

Style.css文件中只有一行代码:

body{

    background-color:red;

}

  1. 创建一个子模板

用同样的方法在template下面创建一个sub.html文件,代码如下

{% extends "base.html" %}

{% block title %}Index{% endblock %}

{% block head %}

    {{ super() }}

    <style type="text/css">

        .important { color: #336699; }

    </style>

{% endblock %}

{% block content %}

    <h1>Index</h1>

    <p class="important">

      Welcome on my awesome homepage.

    </p>

{% endblock %}

可以看到这个子模板用extends方法继承了base.html模板,然后又重写了 title, head, content三个block中的内容

一个模板中不能出现重复名称的block块

其中的supper()用来调用父级模板中的block块内容,在本例中,supper()会把父级的head块内容写到子模板中

  1. 定义route

在code.py文件中添加sub.html的route定义

@app.route("/tmpl/sub")

def renderSub():

    return render_template("sub.html")

运行效果

如果想多次调用一个block块,可以使用self.block块名称进行调用,比如,我们把<h1>Index</h1>这里替换成<h1>{{self.title()}}</h1>

运行效果:

flask中jinjia2模板引擎详解3的更多相关文章

  1. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  2. flask中jinjia2模板使用详解2

    接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...

  3. flask中jinjia2模板引擎使用详解1

    在之前的文章中我们介绍过flask调用jinja2模板的基本使用,这次我们来说一下jinjia2模板的使用 Jinja2 在其是一个 Python 2.4 库之前,被设计 为是灵活.快速和安全的. 模 ...

  4. flask中jinjia2模板引擎使用详解5

    接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%}   下面引用 ...

  5. 原生twig模板引擎详解(安装使用)

    最近在学习SSTI(服务器模板注入),所以在此总结一下 0x00 Twig的介绍 什么是Twig? Twig是一款灵活.快速.安全的PHP模板引擎. Twig的特点? 快速:Twig将模板编译为纯粹的 ...

  6. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

  7. JScript中的条件注释详解(转载自网络)

    JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...

  8. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  9. mysql中SQL执行过程详解与用于预处理语句的SQL语法

    mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...

随机推荐

  1. spark-遇到问题小结

     经常会遇到 类似 shuffle 0 的错误,或者 connect refuse .主要是shuffle 导致内存不足引起的.shuffle 分为 shuffle read 和write . 1. ...

  2. js面向对象之继承那点事儿根本就不是事

    继承 说道这个继承,了解object-oriented的朋友都知道,大多oo语言都有两种,一种是接口继承(只继承方法签名):一种是实现继承(继承实际的方法) 奈何js中没有签名,因而只有实现继承,而且 ...

  3. 2018-01-05-医药行业的IT革命探讨

    layout: post title: 2018-01-05-医药行业的IT革命探讨 key: 20180105 tags: IT AI 医疗 modify_date: 2018-01-05 --- ...

  4. Eclipse导入项目文件夹

    Eclipse项目导入出现感叹号解决方法 出现这样的情况怎么办 右击项目名-Bulid path -configure Bulid path 选择Libraries-Remove(移去错的)-Add ...

  5. Git 生成 SSH 公钥

    2018-01-05 11:24:04 许多 Git 服务器都使用 SSH 公钥进行认证. 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份. 这个过程在所有 ...

  6. OSSEC初探

    OSSEC初探 概念: OSSEC是一款开源的基于主机的入侵检测系统(HIDS),它可以执行日志分析.完整性检验.windows注册表监控.隐匿性检测和实时告警.它可以运行在各种不同的操作系统上,包括 ...

  7. cordova+vue 项目打包成Android(apk)应用

    现在使用vue开发的项目越来越多,使用vue开发的移动端打包就成了最大的问题.现在前端打包方案有好多种,但是综合来说,我比较喜欢用cordova来进行Android和ios的打包,配置完成之后,每次只 ...

  8. 前端开发-DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  9. MySQL笔记-turncat、drop、delete的区别

    TRUNCATE 语法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]功能: 删除整个表的数据并释放空间   描述: 由于Trunca ...

  10. CheckStyle

    在Eclipse当中安装CheckStyle插件非常方便,和安装FindBugs除了URL有区别之外,其他的几乎完全一样.我们可以参照以下几个步骤进行(注意一下,eclipse版本不一样,可能安装插件 ...