现在位置: 首页 > Flask 教程 > 正文

Flask 静态文件

任何一个完整的 Web 应用都离不开 CSS、JavaScript 和图片等静态资源。

本章介绍 Flask 如何管理和提供静态文件。


默认静态文件约定

Flask 默认从应用目录下的 static/ 文件夹提供静态文件。

你只需要创建这个文件夹并将静态资源放入其中即可:

myflaskapp/
├── app.py
├── templates/
│   └── index.html
└── static/
    ├── css/
    │   └── style.css          # 样式文件
    ├── js/
    │   └── main.js            # JavaScript 文件
    └── images/
        └── logo.png           # 图片文件

在模板中引用静态文件

不要硬编码路径,使用 url_for('static', filename='...') 生成静态文件的 URL。

这样做的好处是:即使将来应用挂载到子路径(如 /myapp),URL 也会自动调整。

实例

<!-- 文件路径:templates/index.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>RUNOOB Flask 教程</title>
    <!-- 引用 CSS 文件 -->
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">

    <!-- 网站图标 favicon -->
    <link rel="icon" href="{{ url_for('static', filename='images/favicon.ico') }}">
</head>
<body>
    <!-- 引用图片 -->
    <img src="{{ url_for('static', filename='images/logo.png') }}" alt="RUNOOB Logo" width="200">

    <h1>欢迎来到 RUNOOB</h1>
    <p>这是一个使用 Flask 构建的 Web 应用。</p>

    <!-- 引用 JavaScript 文件 -->
    <script src="{{ url_for('static', filename='js/main.js') }}"></script>
</body>
</html>

自定义静态文件路径

如果不想使用默认的 static/ 文件夹,可以在创建 Flask 应用时自定义:

实例

from flask import Flask

# static_folder:服务器上的文件夹路径
# static_url_path:URL 中的访问路径
app = Flask(__name__,
           static_folder="public",        # 静态文件放在 public/ 目录下
           static_url_path="/assets")     # 通过 /assets 路径访问
# 此时访问 /assets/css/style.css 对应文件 public/css/style.css
参数 默认值 说明
static_folder "static" 存放静态文件的本地文件夹
static_url_path None(使用 static_folder 的名称) 静态文件对外暴露的 URL 前缀

CSS 文件示例

创建一个基本样式文件,让页面看起来更专业:

实例

/* 文件路径:static/css/style.css */
body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    max-width: 800px;
    margin: 0 auto;
    padding: 20px;
    line-height: 1.6;
    color: #333;
}

h1 {
    color: #2c3e50;
    border-bottom: 2px solid #3498db;
    padding-bottom: 10px;
}

nav {
    background: #f8f9fa;
    padding: 10px;
    border-radius: 4px;
    margin-bottom: 20px;
}

nav a {
    color: #3498db;
    text-decoration: none;
    margin-right: 15px;
}

footer {
    margin-top: 40px;
    padding-top: 20px;
    border-top: 1px solid #eee;
    color: #999;
    font-size: 14px;
}

访问 http://127.0.0.1:5000/,效果如下:


开发与生产环境的区别

Flask 内置的静态文件服务只适合 开发环境

在生产环境中,应该由 Nginx、Apache 等专业 Web 服务器直接处理静态文件,这样效率远高于通过 Python 代码来服务。

生产部署的详细内容将在后续章节中介绍。