10

我已经使用Flask创建了一个网站,并且在内置开发服务器上让事情正常工作没有任何问题。我还能够在我的生产服务器上运行 mod_wgsi 下的东西。但是,我从一个静态/CGI/PHP-5.2应用程序托管我的静态媒体,如果不手动更改我的 html 文件中的所有 url,我无法让 Flask “看到”它。

问题似乎是基本的 Flask 设置需要静态文件在 Flask 应用程序中。有关详细信息,请参见此处。本质上,我认为我需要更改以下一个衬里的“静态”部分的 url:

<link rel="stylesheet" href="{{url_for('static', filename='css/print.css')}}" type="text/css" media="print"/> 

看起来我可以在init .py, instructions here中更改它,但是如下定义 static_path 似乎不起作用。

app = Flask(__name__, static_path = '/web_media')

需要明确的是,如果我像这样手动定义我的网址:

<link rel="stylesheet" href="/web_media/css/print.css" type="text/css" media="print"/>

一切正常。任何帮助将不胜感激。

4

3 回答 3

9

static_folder改为覆盖。

app = Flask(__name__, static_folder = '/web_media')
于 2013-05-25T13:51:23.247 回答
4

如果这是一个生产设置,Flask 不应该为您的静态内容提供服务;Web 服务器(nginx、apache、cherokee 等)应该处理它,因为它在处理这些类型的操作方面比 python 进程更有效。从它的声音(基于 mod_wsgi 参考)来看,您正在使用 apache,因此您可以通过这种方式更改配置文件以使用 apache 从 static/CGI/PHP-5.2 提供静态内容。

假设“web_media”是有点虚构的 /var/www/static/CGI/PHP-5.2 目录下的一个目录,并且包含您的 css/js/etc。资产。在您的配置文件中,在您配置此应用程序的区域内添加类似的内容。

Alias /web_media/ /var/www/static/CGI/PHP-5.2/web_media/

<Directory /var/www/static/CGI/PHP-5.2/web_media>
  Order deny,allow
  Allow from all
</Directory>

自从我使用/配置 apache 以来已经有一段时间了,所以不能保证上述内容第一次就可以完美运行。但重点是,使用网络服务器来处理静态媒体。

于 2011-05-11T16:43:13.980 回答
2

对于生产环境,您应该通过 http 服务器(例如 nginx/apache)提供静态文件。请参阅上面 Philip Southam 的回答。

尽管如此,有时您会使用 werkzeug 服务器(例如开发/测试)。在这种情况下,需要查看 2 个关键字参数:

  • static_folder:文件系统上的物理位置。如果它是相对路径而不是相对于项目根目录。
  • static_url_path:这是静态内容的 url 查找路径。

例如,如果我有一个位于 的静态文件/path/to/static/files/myfile.jpg/path/to/static/files作为静态文件根目录,并且您想通过http://example.com/mystatic/myfile.jpg. 我将执行以下操作:

from flask import Flask

app_name = __name__
app = Flask(app_name, static_folder='/path/to/static/files', static_url_path='/mystatic')

假设您使用的是 0.7 或更高版本的烧瓶(当前为 0.11.1)

于 2016-10-26T01:30:20.730 回答