2013-11-04 54 views
4

是否有烧瓶功能或将静态文件路径转换为磁盘上绝对文件路径的简单方法?例如,“/static/css/style.css”需要根据app或blueprint中定义的静态文件夹返回style.css的绝对路径。烧瓶静态文件到绝对路径

为了澄清,我目前使用Flask-Asset。

{% assets "all_js" %} 
    <script type="text/javascript" src="{{ ASSET_URL }}"></script> 
{% endassets %} 

模板中的上面部分会在生产端产生这一点。不使用相对路径的主要原因是我可以从无Cookie域中提供静态。

<script type="text/javascript" src="/static/public/all.580e5dae.js"></script> 
+0

你如何期待处理的事实,在部署时,瓶大概不会知道哪里可以找到静态文件夹,因为确切位置没有在Flask中设置,而是在某些Apache或其他Web服务器配置中设置? –

+0

正如米格尔所说的检查https://github.com/miracle2k/flask-assets/blob/master/src/flask_assets.py 检查get_static_folder函数。似乎是一个很好的起点。 – jab

回答

0
import os 
base_path = os.getcwd() # Replace this appropriately with your static folder path 
# We shouldn't use 'static' twice if it is already there in the base_path 
# as correctly pointed out by mark-hildreth 
if os.path.basename(base_path) == 'static': 
    file_path = os.path.normpath('/css/style.css') 
else: 
    file_path = os.path.normpath('/static/css/style.css') 
abs_path = os.path.join(base_path+file_path) 
if os.path.exists(abs_path): # Verifies existence of given path 
    print abs_path 
+0

这是其中的一部分,但不是全部。首先,你正在使用''/ style/css'',但是这个问题明确地使用''/ static/css/style.css''作为示例的一部分。你的代码神奇地通过剥离'/ static'部件来做正确的事情,但是在一些配置中,它可能不是'/ media'而不是'/ static'。另外,如果你的目标是将它传递给'join',为什么还要使用字符串连接? –

+0

我在示例中使用了错误的路径。 –

+0

这仍然不能解决问题。假设如果'/ static'是URL的一部分,那么'/ static'是文件名的一部分,这是不能保证的。 –

2

这是我不明白为什么你需要获得的路径,静态文件,但在任何情况下,我认为,如果你看一下Flask-Assets的实现,它可以得到一些想法代码来定位应用程序和蓝图中的静态文件并以不同的方式处理它们。

也许你会发现Flask-Assets完全符合你的要求。解决的

0

简单的方法是使用 'static/css/name_of_css.css'代替url_for('static', filename='name_of_css.css')

+0

需要将css文件夹包含在文件中,因为静态只能解析为实际的静态文件夹。 ''url_for('static',filename ='/ css/font-awesome.min.css')“' –