【发布时间】:2013-02-09 05:54:47
【问题描述】:
在我的烧瓶模板文件中,我包含一个 css 文件(我省略了样板文件),如下所示:
url_for('static', filename='css/bootstrap.css')
这将呈现为/static/css/bootstrap.css,这意味着(由于前导斜杠)它被解释为domain.com/static/css/boostrap.css。不幸的是,实际的 static 文件夹位于一个子目录:domain.com/projects/test/static/
环境细节:
我的 fcgi 文件位于 ~/fcgi-bin 文件夹中(我猜是主机特定的):
$ cat ~/fcgi-bin/test.fcgi
#!/usr/bin/env python2.7
import sys
sys.path.insert(0, "/home/abcc/html/projects/test")
from flup.server.fcgi import WSGIServer
from app import app
class ScriptNameStripper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)
app = ScriptNameStripper(app)
if __name__ == '__main__':
WSGIServer(app).run()
我的 .htaccess 位于 domain.com/projects/test/
$ cat .htaccess
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +FollowSymLinks +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fcgi-bin/test.fcgi/$1 [QSA,L]
</IfModule>
总而言之,我希望 url_for('static', filename='css/bootstrap.css') 返回 static/css/bootstrap.css 而不是 /static/css/bootstrap.css
编辑 #1
我注意到这也发生在普通的 url_for 调用上,而不是像 url_for('about') 这样的静态文件。
编辑#2
我已经为此写了quickstart-app 和a blog post。
【问题讨论】:
标签: python flask fastcgi url-for