2012-03-22 60 views
1

我有一個Web應用程序,它是通過Flask的方式部署的。我使用OpenLayers地圖來請求文件夾scriptdir/theme/default中的樣式表。我不是很高興與我的解決方案,所以我希望有人可以給我一個提示,以更好地做到這一點:Flask和OpenLayers

@app.route('/theme/default/style.css') 
def get_openlayers_css(): 
    return url_for('static', filename='jslib/theme/default/style.css') 

JavaScript控制檯顯示我這樣的警告:

Resource interpreted as Stylesheet but transferred with MIME type text/html: http://localhost:5000/theme/default/style.css 
    OpenLayers.Map.OpenLayers.Class.initialize     OpenLayers.js:424 
    ... 

請求的樣式表位於/static/jslib/theme/default/style.css和/ static/jslib中的OpenLayers.js文件。我想過關於流式傳輸的CSS文件,但我是新來的瓶,因此我無法得到這個工作。

在此先感謝!

問候

回答

2

的OpenLayers具有定位基本URL資源(見source code)的一個奇怪的方式。如果您使用的是「unpacked」版本(非單個文件),則OpenLayers.js需要位於名爲lib的文件夾中,否則URL自動檢測將失敗。

另外,您的get_openlayers_css函數正在返回包含URL的文本響應;你可能想寫一個重定向:

@app.route('/theme/default/style.css') 
def get_openlayers_css(): 
    return redirect(url_for('static', filename='jslib/theme/default/style.css')) 
+0

謝謝,通過應用此警告消失了,但在我看來tonio提供的解決方案更合適。 – janr 2012-03-23 14:38:02

1

這是一種正常的行爲。您的方法def get_openlayers_css():以默認MIME類型TEXT作爲字符串返回URL。

嘗試返回CSS內容而不是路徑Flask.send_from_directory

看看example in Flask documentation