【问题标题】:Flask : How to serve static files from under the template directory?Flask:如何从模板目录下提供静态文件?
【发布时间】:2013-02-08 07:00:51
【问题描述】:

我使用 Flask 并想更改我的资产文件夹目录。这是我的文件夹结构:

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

我想将静态文件夹(js,css,font,img)下的所有文件夹移动到文件夹default。 但是当我这样做时,我的 css 文件和其他文件(js etc.) 无法加载页面。我应该为我的应用程序设置一个属性吗? 我也试过这个:

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

【问题讨论】:

  • 我遇到了类似的问题;你找到解决办法了吗?
  • 我使用了 Flask-Themes 扩展并处理了我的问题
  • 难道不是 app = Flask(name,static_folder="/templates/default")?
  • 我刚刚遇到了类似的问题并最终解决了这个问题:stackoverflow.com/a/29521067/303114(我相信这是一个好方法,因为它是自定义的方式,并且您可以对您提供的静态文件进行更多的编程控制)

标签: python flask jinja2 assets


【解决方案1】:

初始化应用时应该是 static_folder 而不是 static_path。

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

在模板中:

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

希望对你有帮助。

【讨论】:

  • 是否可以使用app.config['static_folder']='foo' 或其他方式更改静态文件
【解决方案2】:

抱歉,我误读了您的原始目录输出。您需要将 templates 放在 static 目录中,因为这是 Flask 默认查找静态数据的地方。

【讨论】:

  • 我把模板放到静态文件夹现在得到了这个 jinja2.exceptions.TemplateNotFound
  • 您将它们放在static/templates/&lt;templat_name&gt;static/&lt;template_name 中?第一个版本是正确的。
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 2023-03-06
  • 2015-11-03
相关资源
最近更新 更多