10.静态文件

发布时间 2023-11-19 19:12:02作者: 想要暴富的小男孩

静态文件

静态文件(static files)和模板概念相反,指的是内容不需要动态生成的文件,比如图片、CSS 文件和 JavaScript 脚本等。

在 Flask 中,需要创建一个 static 目录来保存静态文件,它应该和程序模块、templates 在同一目录层级。

生成静态文件 URL

在 HTML 文件里,引入这些静态文件需要给出资源所在的 URL。为了更加灵活,这些文件的 URL 可以通过 url_for() 函数来生成。

对于静态文件,url_for() 中需要传入的路由是 static,同时使用 filename 参数来传入相对于 static 文件夹的文件路径。

假如在 static 文件夹的根目录下面放了一个 logo.jpg 文件,可以这样来获取图片:

<img src="{{ url_for('static', filename='pic.jpg') }}">

花括号部分的调用会返回 /static/pic.jpg

这里要注意,在 Python 脚本里,url_for() 函数需要从 flask 包中导入,而在模板中则可以直接使用就可以,因为 Flask 把一些常用的函数和对象添加到了模板上下文里。

添加图标

图标(favourite icon) 是显示在标签页和书签栏的网站头像。需要准备一个 ICO、PNG 或 GIF 格式的图片,大小一般为 16×16、32×32、48×48 或 64×64 像素。把这个图片放到 static 目录下,然后在 HTML 模板里引入它。

创建 flask_static.py

from flask import Flask, render_template

# 创建 Flask 应用程序实例
app = Flask(__name__)

# 定义路由和视图函数
@app.route("/")
def show_static():
return render_template("static.html")

# 运行应用程序
if __name__ == '__main__':
app.run(debug=True, port=5050)

在 templates 目录下创建 static.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>静态文件</title>
<link rel="icon" href="{{ url_for('static', filename='logo.jpg') }}">
</head>
<body>
<h1>静态文件</h1>
</body>
</html>
<script type="text/javascript"></script>

启动服务,浏览器中访问 http://127.0.0.1:5050/,即可在浏览器标签页上看到这个图标。

添加图片

为了让页面不那么单调,可以在页面中添加图片。

可以在 static 目录下面创建一个子文件夹 images,把图片都放到这个文件夹里。

创建子文件夹并不是必须的,只是为了更好的组织同类文件。同样的,如果有多个 CSS 文件,也可以创建一个 css 文件夹来组织他们。

下面在 static.html 中添加图片,注意文件路径要写正确。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>静态文件</title>
<link rel="icon" href="{{ url_for('static', filename='logo.jpg') }}">
</head>
<body>
<h1>
<img alt="branch" src="{{ url_for('static', filename='images/branch.gif') }}">
霍格沃兹
</h1>
<div>
<img alt="Gryffindor" src="{{ url_for('static', filename='images/Gryffindor.png') }}">
<img alt="hogwarts" src="{{ url_for('static', filename='images/hogwarts.jpg') }}">
</div>
</body>
</html>
<script type="text/javascript"></script>

保存文件,刷新浏览器页面即可看到页面中展示了对应的图片。

添加 CSS 文件

虽然添加了图片,但是页面排版还不好看,因为现在还没有添加 CSS 定义。

下面在 static 目录下创建一个 CSS 文件 style.css。

body {
margin: auto;
max-width: 800px;
font-size: 14px;
font-family: Helvetica, Arial, sans-serif;
}

/* 霍格沃兹学院 */
.hogwarts {
display: auto;
margin: 0 auto;
height: 300px;
}

/* 小图片 */
.pic {
width: 100px;
}

接着在 static.html 页面的 标签内引入这个 CSS 文件。

<head>

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

最后要为对应的元素设置 class 属性值,以便和对应的 CSS 定义关联起来:

templates/index.html:添加 class 属性

<body>
<h1>
<img alt="branch" class="pic" src="{{ url_for('static', filename='images/branch.gif') }}">
霍格沃兹
</h1>
<div>
<img alt="Gryffindor" class="pic" src="{{ url_for('static', filename='images/Gryffindor.png') }}">
<img alt="hogwarts" class="hogwarts" src="{{ url_for('static', filename='images/hogwarts.jpg') }}">
</div>
</body>

刷新浏览器,可以看到页面中的图片按照 CSS 样式的定义进行展示。