1、模板 - Templates
1、什么是模板
模板:模板是一个包含响应文本的文件(通常是html文件),在Flask 中就是允许响应给用户看的网页。
该文件中允许包含"占位变量"来表示动态的内容,其具体值在请求中才能知道。"占位变量"最终会被真实的值所替换。
模板最终也会被解析成字符串再响应给客户端,这一过程通常称为"渲染"。
Flask中的模板是依赖于 Jinja2 的模板系统
2、模板的设置
默认情况下,Flask会在程序文件夹中的 templates 的子文件夹中搜索模板。
默认情况下,需要手动创建 templates 文件夹。
3、模板的渲染
作用:在视图函数中,通过 return render_template()将模板文件(xx.html)渲染成字符串之后,再响应给客户端浏览器
函数:render_template(‘xxx.html‘,arg1=value1,arg2=value2)
ex:return render_template(‘xxx.html‘)
参数1 : xxx.html ,要渲染给客户端的html模板文件
参数2 ~ n :要传递给模板动态显示的变量占位符,如果没有动态的变量占位符,则可以省略
返回值:字符串
4、模板中的语法(重难点)
1、变量
变量是一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中获取出来的。
1、在视图中 :
@app.route(‘/‘)
def index():
return render_template(‘xxx.html‘,变量1=值1,变量2=值2,..)
ex:return render_template(‘xxx.html‘,name=‘laowang‘,age=35)
name 和 age 就是要传递到 xxx.html 中的变量
2、在模板中:
{{变量名}}
<h1>{{name}}</h1>
练习:
在 01-template.html基础上,完成下列效果显示:
歌名 :《绿光》
作词 : 宝强
作曲 : 乃亮
演唱 : 羽凡
----------------
书名 :《钢铁是咋练成的》
作者 : 奥斯特洛夫斯基
价格 : 32.5
出版社 :北京大学出版社
music=‘绿光‘
author=‘宝强‘
qu=‘乃亮‘
singer=‘羽凡‘
# locals():将当前函数内所有的局部变量封装成一个字典
print(locals())
return render_template(‘01-template.html‘,params=locals())
-------------------------------------
2、过滤器
1、什么是过滤器
过滤器是允许在变量输出显示之前改变变量的值
2、语法
{{变量|过滤器}}
Jinja2 模板中常见过滤器:
过滤器名 说明
capitalize 首字符变大写,其他字符变小写
lower 把值转换成小写
upper 把值转换成大写
title 把值中的每个单词的首字符变大写
trim 去掉值两边的空格
3、标签
1、什么是标签
每个标签表示的是不同的服务器端的功能
2、常用标签
1、if标签
1、基本if结构
{% if 条件 %}
{% endif %}
2、if ... else ... 结构
{% if 条件 %}
满足条件时要运行的代码
{% else %}
不满足条件时要运行的代码
{% endif %}
3、if ... elif ... elif ... else
{% if 条件1 %}
满足条件1,要运行的代码
{% elif 条件2 %}
满足条件2,要运行的代码
{% elif 条件3 %}
满足条件3,要运行的代码
{% else %}
以上条件都不满足的时候,要运行的代码
{% endif %}
2、for 标签
{% for 变量 in 元组|列表|字典 %}
{% endfor %}
在 Jinja2 模板的循环中,支持内部变量 - loop
loop作用:记载当前循环中的一些相关信息
loop 常用属性:
1、index
用法:loop.index
作用:记录当前循环的次数,从1开始记录
2、index0
用法:loop.index0
作用:同上,从0开始记录
3、first
用法:loop.first
作用:值为True,则表示当前循环是第一次循环
4、last
用法:loop.last
作用:值为True,则表示当前循环是最后一次循环
3、macro 标签 (宏)
1、作用
相当于是在模板中声明函数
2、语法
使用 {% macro %} 标签声明宏
<!-- 声明 -->
{% macro 名称(参数列表) %}
xxxx xxxx
{% endmacro %}
<!-- 调用 -->
{{show(uname)}}
et:
<!-- 声明 -->
{% mscro show(str) %}
<h1>{{str}}</h1>
{% endmacro %}
<!-- 调用 -->
{{show(uname)}}
3、在独立的文件中声明宏
为了方便重复使用,允许将宏放在单独的模板文件中声明定义
1、创建 macro.html 模板文件
作用:定义项目中要用到的所有的宏
ex:{% mscro show(str) %}
<h1>{{str}}</h1>
{% endmacro %}
2.在使用的网页中,导入 macro.html
{% import ‘macro.html‘ as macros %}
4、include 标签(模板的包含)
作用:将其他的模板文件包含到当前的模板文件中。
在多处重复使用的模板代码可以放在单独的文件中,可以被其他的模板所包含(引用)
语法:{% include ‘xxx.html‘ %}
5、静态文件处理
1、什么是静态文件
在Flask中不能与服务器动态交互的文件都是静态文件
如:图片,css文件,js文件,音视频文件,...
<img src="images/a.jpg">
<link rel="" href="css/a.css">
<script src="js/a.js"></script>
<video src="mp4/a.mp4"></video>
<audio src="music/a.mp3"></audio>
2、静态文件的处理
1、所有的静态文件必须放在名为 static 的目录中。static目录要放在项目的根目录处。
结构:
FlaskDemo02
run01.py
templates
01-xxx.html
02-xxx.html
static
images
a.jpg
b.jpg
js
body.js
slider.js
css
2、所有的静态文件必须通过 /static/ 路径访问
/static/images/a.jpg
/static 要到静态资源目录中继续搜索
ex:<img src="/static/资源路径">
-------------------------
作业:
搭建 Blog 项目结构
1.创建项目 - Blog
2.将 所有的 html 文件 copy 到 templates 目录中作为模板
3.创建 static 目录,将 js 目录,css目录,images目录 copy到 static 中
4.创建 路由 /
访问 根路径时,显示首页模板(index.html)
要求:css,images,js 都能正常显示
反向解析:
url_for(‘static‘,filename=‘<file_path>‘)
<img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">
params = {
‘author‘: ‘奥斯特罗夫斯基‘,
‘dic‘: {‘WWC‘: ‘隔壁老王‘, ‘LZ‘: ‘吕泽‘, ‘WMZ‘: ‘老魏‘, ‘MM‘: ‘蒙蒙‘},
‘bookName‘: ‘钢铁是怎样炼成的‘,
‘tup‘: (‘水浒传‘, ‘三国演义‘, ‘红楼梦‘, ‘西游记‘),
‘price‘: 32.5,
‘list‘: [‘漩涡鸣人‘, ‘卡卡西‘, ‘自来也‘, ‘佐助‘],
‘person‘: <__main__.Person object at 0x7f157c2c9048>
}
params[‘author‘]
1、静态文件地址的反向解析:
url_for(‘static‘,filename=‘<file_path>‘)
ex:
<img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">
结果:/static/images/b04.jpg
2、模板的继承
1、什么是模板的继承
模板的继承类似于类的继承,如果在一个模板中出现的大量内容是另外一个模板的话,那么就可以使用继承的方式来简化开发
2、语法
1、父模板
需要定义出哪些内容在子模板中是可以被重写的
{% block 块名 %}
父模板中正常显示的内容
{% endblock %}
block:
定义允许在子模板中被修改的内容
1、在父模板中是可以正常显示的,没有任何影响
2、在子模板中是可以被重写的
2、子模板
1、需要指定继承来自哪个父模板
使用 {% extends ‘父模板名称‘ %} 来完成继承
2、重写父模板中对应内容
使用 {% block 块名 %} 来重写父模板中的同名内容
{% block 块名 %}
此处编写的内容会覆盖掉父模板中同名block的内容。
允许通过 {{super()}} 来调用父模板中的内容。
{% endblock %}
ex:
{% extends ‘02-parent.html‘ %}
{% block content %}
{{ super() }}
<h1 style="color: red;">这是child主体</h1>
{% endblock %}
3、修改配置
1、构建Flask 应用允许的指定配置信息
app = Flask(__name__,template_folder=‘muban‘,static_url_path=‘/s‘,static_folder=‘/sta‘)
1.template_folder
指定存放模板的文件夹名称(设置模板的保存路径)
2.static_url_path
访问静态资源的路径(设置静态文件的访问路径,即映射到WEB中的访问路径)
http://localhost:5000/s/xxx 查找静态资源文件
3.static_folder
指定存放静态文件的目录名称(映射到项目中的目录名称)
在项目的根目录中 ,有一个名为 sta 的目录用于存放静态文件。
2、启动程序的运行配置
app.run(debug = True,port = 5555,host = ‘0.0.0.0‘)
host : 指定访问地址,0.0.0.0 表示局域网内的任何机器都可以访问网站
查看ip:ifconfig
原文地址:https://www.cnblogs.com/py321/p/9925769.html