1 包含

  直接把另一个文件的内容,复制粘贴过来

  {% include "模板路径" %}

    注意:模板都是放在 templates 这个文件夹下面的,可以在里面新建文件夹来进行分离;

      例如:{% include "include/header.html" %}

  

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试页面</title>
</head>
<body>

header模板

</body>
</html>

footer模板

<div>
<h2>这是测试包含时的内容</h2>
</div>

content模板

{% include "include/header.html" %}

{% include "include/content.html" %}

{% include "include/footer.html" %}

整合模板

from flask import Blueprint
from flask import render_template bp_test = Blueprint('test', __name__) @bp_test.route('/test/')
def bpTest():
return 'test 页面' @bp_test.route('/include/')
def bpInclude():
return render_template('include/test.html')

蓝图代码

from flask import Flask
from flask import url_for from bp_include import bp_test
# from bp_extends import bp_extends app = Flask(__name__) app.register_blueprint(bp_test)
# app.register_blueprint(bp_extends) @app.route('/')
def hello_world():
return 'Hello World!' print(app.url_map) if __name__ == '__main__':
app.run(debug=True)

python代码

2 继承

  跟java里面的继承很像;但是可以在模板中挖坑,在子模板中填坑;也可以在子模板中进行挖坑

  2.1 继承格式

    {% extends “模板路径” %}

      注意:继承语句只能写在模板的开始位置,而且写了继承语句的模板只能进行填坑或者挖坑操作

  2.2 填坑和挖坑的格式

    {% block 坑名 %}

    {% endblock 坑名 %}

  2.3 小技巧

    如果要局部修改,在坑里面再挖坑

    如果要保留负模版坑的内容,又加点新东西使用 {{ super() }},在写上需要添加的东西

3 构建自己的网页结构

  利用 bootstrap 构建自己的网页结构

  3.1 下载 bootstrap 相关文件

    bootstrap中文官网:点击前往

    

  3.2 下载 bootstrap 的依赖框架

    jquery官网:点击前往

    

  3.3 将下载到的bootstrap文件和jquery文件全部拷贝到static文件中

    

    

  3.4 创建一个html模板 base.html 作为基础模板

    base.html 文件的作用:引入所有需要用到的公共的静态文件

<!DOCTYPE html>
{# base.html 文件的作用:引入所有需要用到的公共的静态文件 #}
<html lang="en">
<head>
{% block head %}
<meta charset="UTF-8"> <title>
{% block title %}
base模板
{% endblock title %}
</title> <script src="{{ url_for('static', filename='js/jquery-3.2.1.js') }}"></script>
<script src="{{ url_for('static', filename='js/bootstrap.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.css') }}" />
{% endblock head %}
</head>
<body>
{% block body %}
这是base模板的body
{% endblock body %}
</body>
</html>

base.html

  注意:<script src="{{ url_for('static', filename='js/jquery-3.2.1.js') }}"></script>

    能够在模板中使用 url_for 方法的原理是flask已经对 Jinja2 模板进行了一些初始化配置

  3.5 根据 base.html 创建一个网页布局模板 layout.html

{% extends "extends/base.html" %}
{# 继承只能继承一个,而且必须写在最前面;但是可以在父模板挖坑,也可以在子模板中填坑和挖坑;
注意:填坑和挖坑的语法都是一样的
#} {% block title %}
layout模板
{% endblock %} {% block head %}
{{ super() }}
<link rel="stylesheet" href="{{ url_for('static', filename='css/layout.css') }}" /> {% endblock %} {% block body %}
layout模板的body
<div id="nav">
这是导航条
</div>
<div id="content">
{% block content %}
这是内容
{% endblock content %}
</div>
<div id="footer">
这是页脚
</div>
{% endblock body %}

layout.html

  3.6 根据 layout.html 创建一个页面 index.html 

{% extends "extends/layout.html" %}

{% block title %}
首页
{% endblock %} {% block head %}
{{ super() }}
<link rel="stylesheet" href="{{ url_for('static', filename='css/index.css') }}" />
{% endblock %} {% block content %}
<ul>
{% for name in ["warrior", "fury", "zeus"] %}
<li>
{{ name }}
</li>
{% endfor %}
</ul>
<hr />
<button class="btn btn btn-default">点击</button>
<hr />
<ul class="nav nav-tabs">
<li role="presentation" class="active"><a href="#">Home</a></li>
<li role="presentation"><a href="#">Profile</a></li>
<li role="presentation"><a href="#">Messages</a></li>
</ul>
{% endblock content %}

index.html

  3.7 使用自己写的页面 index.html

from flask import Blueprint
from flask import render_template bp_extends = Blueprint('extends', __name__, url_prefix='/extends') @bp_extends.route('/base/')
def ex_base():
return render_template('extends/base.html') @bp_extends.route('/layout/')
def ex_layout():
return render_template('extends/layout.html') @bp_extends.route('/index/')
def ex_index():
return render_template('extends/index.html')

蓝图代码

from flask import Flask
from flask import url_for # from bp_include import bp_test
from bp_extends import bp_extends app = Flask(__name__) # app.register_blueprint(bp_test)
app.register_blueprint(bp_extends) @app.route('/')
def hello_world():
return 'Hello World!' print(app.url_map) if __name__ == '__main__':
app.run(debug=True)

python代码

  3.8 项目文件图

    

4 宏

  待更新...

5 模板中变量的来源

  flask的全局变量

  Flask对象的上下文处理器

  蓝图的上下文处理器

  Jinja2的全局函数

  自己设置的变量

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试模板</title>
</head>
<body>
<h2>这里是测试模板的内容</h2>
<hr /> <h4>range函数</h4>
{% for foo in range(10) %}
<li>{{ foo }}</li>
{% endfor %}
<hr /> <h4>自动填充函数</h4>
{{ lipsum(n=3, html=true, min=20, max=100) }}
<hr /> <h4>cycler函数</h4>
<p>
{% set row_class = cycler("warrior", "fury", "zeus") %}
{{ row_class.next() }}
{# 输出当前值,指向下一个#}
<br />
{{ row_class.current }}
{# 输出当前值,指向不变#}
<br />
{{ row_class.reset() }}
{# 输出None,指向第一个#}
<br />
{{ row_class.current }}
</p> </body>
</html>

html模板

from flask import Blueprint
from flask import render_template bp_test = Blueprint('test', __name__, url_prefix='/test') @bp_test.route('/test/')
def test():
return render_template('test.html')

蓝图代码

from flask import Flask
from flask import url_for # from bp_include import bp_test
# from bp_extends import bp_extends
from bp_test import bp_test app = Flask(__name__) # app.register_blueprint(bp_test)
# app.register_blueprint(bp_extends)
app.register_blueprint(bp_test) @app.route('/')
def hello_world():
return 'Hello World!' print(app.url_map) if __name__ == '__main__':
app.run(debug=True)

python代码

Flask08 包含(include)、继承(extends)、宏???、模板中变量的来源、利用bootstrap构建自己的网页结构的更多相关文章

  1. flask——包含,继承,宏

     包含,继承,宏  都是为了提高代码的效率,都是为了防止代码的沉余,浪费资源 宏(macro) 可以把它看做Jinja2中的一个函数,他会返回一个模板或者HTML字符串,为了避免反复的编写同样的模板代 ...

  2. Django 模板中 变量 过滤器的使用方法

    一.变量       1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的 ...

  3. Django 模板中 变量 过滤器 标签 的使用方法

    一.变量       1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的 ...

  4. [salt] jinja模板中变量使用pillar的几种方法

    先转载下jinja模板中使用变量的方法,后文主要讲解pillar的变量使用方法 一.jinja模版的使用方法: 1.file状态使用template参数 - template:jinja 2.模版文件 ...

  5. thinkPHP 模板中变量的使用

    一.变量输出                1.标量输出(普通)        2.数组输出                {$name[1]}                {$name['k2'] ...

  6. Django模板中变量的运算

    在django中的模板下我们知道变量使用{{xxx}}来呈现,可是当出现两个变量进行运算怎么处理那? #加法: {{value|add:value2}} #返回的结果是value+value2的值,假 ...

  7. Thymeleaf模板中变量报红

    在上顶部添加 <!--suppress ThymeleafVariablesResolveInspection --> 或者 <!--suppress ALL --> 都可以解 ...

  8. Django 模板中 include 标签使用小结

    include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...

  9. Thinkphp回顾(五)之前台模板中的基本语法

    一.导入CSS和JS文件 的三种方式  (了解) 1.link方式(常规) <link rel=’stylesheet’ type=’text/css’ href=’__PUBLIC__/Js/ ...

随机推荐

  1. Block的详细介绍

    关于block的介绍 ==ios中的内存空间分级== 栈区 存放函数参数值.局部变量.函数返回地址等,函数跳转跳转时现场保护(寄存器),这些系统都会帮我们自动实现,无需我们干预. 所以大量的局部变量, ...

  2. 通过socket和Udp协议简单实现一个群体聊天工具(控制台)

    编写一个聊天程序.有收数据的部分 和 发数据的部分.这两个部分需要同时执行,这就用到多线程技术,一个线程负责收,一个现象负责发. 因为收和发动作是不一致的,所以要定义两个run方法而且这两个方法要封装 ...

  3. Tab动画菜单

    在线演示 本地下载

  4. 第六篇 javascript面向对象

    一.闭包 闭包是指可以包含自由(未绑定到特定对象)变量的代码块. 「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭包是个函数,而它「记 ...

  5. 如何拯救一台glibc被干掉的Linux服务器

    原文: 如何拯救一台glibc被干掉的Linux服务器? 首先如果 libc.so.6 没有被删除, 直接使用LD_PRELOAD就可以恢复 LD_PRELOAD=/lib64/libc-2.12.s ...

  6. EntityFramework 学习 一 Local Data

    DBSet的Local属性提供简单的从context上下文获取当前已经被跟踪的实体(实体不能被标记为Deleted状态) using System.Data.Entity; class Program ...

  7. Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类

    1. 成员内部类分为  静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ...

  8. spring boot: EL和资源 (一般注入说明(二) @Service注解 @Component注解)

    @Service用于标注业务层组件 : 将当前类注册为spring的Bean @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...

  9. 分享知识-快乐自己:虚拟机 NET 网络配置

    第一步: 第二步: 第三步:   第四步:   第五步: 第六步: 第七步: 第九步: 第十步: 第十一步: 第十二步:   第十三步: 成功. 第十四步:开启开机自启动网路连接 cd /etc/sy ...

  10. Winform中的dataGridView添加自动编号

    1.Winform中的dataGridView添加自动编号:http://blog.csdn.net/ohyoyo2014/article/details/38346887 2.如何为datagrid ...