Flask:资源解释为样式表,但使用 MIME 类型 text/html 传输
Posted
技术标签:
【中文标题】Flask:资源解释为样式表,但使用 MIME 类型 text/html 传输【英文标题】:Flask: Resource interpreted as Stylesheet but transferred with MIME type text/html 【发布时间】:2016-03-19 13:38:02 【问题描述】:我使用 Blueprint 的 Flask 应用无法在 Chrome 和 IE 中显示 CSS 文件。
调试信息:
资源解释为样式表,但使用 MIME 类型 text/html 传输
我的应用有这些文件:
app.py
templates/index.html
static/style.css
在我的app.py
:
app = Blueprint("conf_manager",
__name__,
template_folder="templates",
static_folder="static",
static_url_path="/static")
在我的index.html
:
<link rel="stylesheet" type="text/css" href=" url_for('conf_manager.static', filename='style.css') " />
我用Chrome调试,发现浏览器可以获取文件但是类型是text/html
不是text/css
(但是javascript的类型没问题)。
所以我想知道为什么会发生这种情况以及如何解决它。
【问题讨论】:
【参考方案1】:这和 Flask 有点关系。如果您尝试在没有 Flask 网络服务器的情况下直接访问 HTML,则 html 页面会按预期加载应用的 CSS。
更具体地说,实际的解决方案是在“静态”文件夹中创建一个“css”文件夹,然后在代码中任何有 CSS 文件路径的地方添加“css/”。
例如
change => href=" url_for('static', filename='stylesheet.css') " to href=" url_for('static', filename='css/stylesheet.css') " OR
change => href="../static/main.css" to href="../static/css/main.css"
在此更改后,Flask 将按预期加载 CSS,并且 HTML 页面将应用 CSS 而不会发出任何警告。
【讨论】:
【参考方案2】:使用 send_from_directory 并设置 mimetype:
from flask import send_from_directory
scriptPath = os.path.dirname(os.path.realpath(__file__))
os.chdir(scriptPath)
template_folder = os.path.join(os.getcwd(),'templates')
static_folder = os.path.join(os.getcwd(),'static')
app = Flask(__name__, template_folder=template_folder,static_folder=static_folder)
@app.route('/css/<path:path>')
def send_css(path):
return send_from_directory('css', path,mimetype='text/css')
【讨论】:
【参考方案3】:我想通了。在主应用程序中有人添加了response.headers["Content-Type"] = 'text/html; CharSet=UTF-8'
,所以 IE 无法读取 CSS。
我的代码在app.py
app = Blueprint("conf_manager",
__name__,
template_folder="templates",
static_folder="static",
static_url_path="/static")
应该改为:
app = Blueprint("conf_manager",
__name__,
template_folder="templates",
static_folder="static",
static_url_path="/conf_manager/static")
【讨论】:
以上是关于Flask:资源解释为样式表,但使用 MIME 类型 text/html 传输的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress 样式表问题:资源解释为样式表,但使用 MIME 类型传输
Wordpress 资源解释为样式表,但使用 mime 类型 text/html 传输
资源解释为样式表,但使用 MIME 类型 text/javascript 传输
资源解释为样式表,但使用 MIME 类型 text/html 传输