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. Redis缓存全自动安装shell脚本

    我只是把命令放到shell文件中了,方便安装,代码如下: #!/bin/bash # shell的执行选项: # -n 只读取shell脚本,但不实际执行 # -x 进入跟踪方式,显示所执行的每一条命 ...

  2. iOS 动态修改导航栏颜色 UINavigationBar

    示例 所谓动态修改  意思是 在当前页面滚动的过程中 亦或 是在 触发返回事件\进入一个新的页面  导航栏的动态变化 由于系统级别的navBar 高度集成  很多自己想实现的功能 很不好弄 如果是通过 ...

  3. HDFS常见问题

    在HDFS里面,data node上的块大小默认是64MB(或者是128MB或256MB) 问题: 为什么64MB(或128MB或256MB)是最优选择? 为什么不能远少于64MB(或128MB或25 ...

  4. Ubuntu14 下安装jdk1.8

    1.oracle官网下载jdk-8u45-linux-i586.gz 此为32位 2.放在任意目录下,如/home/hongxf 3.直接解压该文件 sudo tar -xvf jdk-8u45-li ...

  5. Idea 添加完项目以后自动生成的web.xml报错 'org.springframework.web.servlet.DispatcherServlet' is not assignable to 'javax.servlet.Servlet

    解决方法:Project Structure - Modules - 你的项目  - Dependencies 添加Tomcat library

  6. CentOS下查看文件和文件夹大小

    当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. 当磁盘大小超过标准时会有报警提示,这时如 ...

  7. BZOJ 1010 [HNOI2008]玩具装箱toy:斜率优化dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 有n条线段,长度分别为C[i]. 你需要将所有的线段分成若干组,每组中线段的 ...

  8. spring学习(3)

    bean的声明周期 为什么把生命周期当做一个重点? Servlet->servlet生命周期 Servlet生命周期分为三个阶段: 1:初始化阶段,调用init()方法 2:响应客户请求阶段,调 ...

  9. D. String Game 二分加字符串匹配

    题目链接 题目大意:给出字符串str1,再第二行给出字符串str2,第三行给出删除str1中的字符的顺序,用数组a[]存,问最多按第三行的顺序删除str1中的字符剩下的字符串中str2 我们定义l为a ...

  10. C - Alyona and SpreadsheetDP

    题目链接 题意在一个矩阵中,询问l~r行是否有一列满足mp[i][j]>=mp[i-1][j](i属于l~r)即非递减序列,是输出Yes,否输出No 用vector<vector<i ...