Flask:如何从模板目录提供静态文件?

5 投票
2 回答
11547 浏览
提问于 2025-04-17 16:47

我在使用Flask,想要更改我的资源文件夹的目录。我的文件夹结构是这样的:

/python
   /static
     /js
     /img
     /font
     /css
   /templates
     /default
       /css
       /js
       /img
   /venv
   app.py

我想把静态文件夹下的所有文件夹 (js, css, font, img) 移动到 default 文件夹下。但是当我这样做后,我的css文件和其他文件(js等)就无法在页面上加载了。我需要为我的应用设置什么属性吗?

我也试过这个:

app = Flask(__name__,static_path="/templates/default")

但还是没能成功。还有其他方法可以做到这一点吗?非常感谢。

更新: 当我在上面的代码中去掉前面的斜杠(static_path="templates/default")时,出现了这个错误 ValueError: urls must start with a leading slash,并且有以下的错误追踪信息:

Traceback (most recent call last):
  File "app.py", line 17, in <module>
    app = Flask(__name__,static_path="templates/default")
  File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 481, in __init__
    view_func=self.send_static_file)
  File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 63, in wrapper_func
    return f(self, *args, **kwargs)
  File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/flask/app.py", line 943, in add_url_rule
    rule = self.url_rule_class(rule, methods=methods, **options)
  File "/Users/ozcan/Library/Python/2.7/lib/python/site-packages/werkzeug/routing.py", line 550, in __init__
    raise ValueError('urls must start with a leading slash')
ValueError: urls must start with a leading slash

2 个回答

-1

抱歉,我之前看错了你原来的目录输出。你需要把 templates 文件夹放在 static 目录里,因为 Flask 默认会在这个地方寻找静态数据。

8

在初始化应用的时候,应该用 static_folder 而不是 static_path。

app = Flask(__name__,static_folder="/templates/default")

在模板中:

<script src="{{ url_for('static', filename='js/file.js')}}"</script>

希望这对你有帮助。

撰写回答