Monday, 6 March 2006

Pylons的prefix选项

Pylons现在提供了prefix选项。利用此选项,可以将Pylons应用的URL整体Shift到sub-path中,这样在前面提到的问题,就轻松化解了。目前该选项,还不是十分完美,需要对middleware.py做一点Hack才行。

Hack以后的middleware.py如下:

...
import re
class PrefixWrapper(object):
def __init__(self, app, prefix):
self.app = app
self.prefix = prefix
self.re_prefix = re.compile(self.prefix + '(.*)')

def __call__(self, environ, start_response):
environ['PATH_INFO'] = re.sub(self.re_prefix, r'\1', environ['PATH_INFO'])
if not environ['PATH_INFO']: environ['PATH_INFO'] = '/'
return self.app(environ, start_response)

def make_app(global_conf, **app_conf):
if not app_conf.has_key('prefix') or app_conf['prefix'] == '/':
app_conf['prefix'] = ''
...
# @@@ Static Files in public directory @@@
staticapp = StaticURLParser(config.paths['static_files'])
staticapp = PrefixWrapper(staticapp, app_conf['prefix'])
...

只要在配置文件config.ini的[app:main]中,增加prefix = /pyapp即可。Pylons应用的/就变成了localhost:5000/pyapp。Apache中SCGIMount指向/pyapp,通过SCGI访问Pylons应用也就没有问题了。

为了在Myghty的模板中应用prefix,可以在middleware.py中设置g.prefix = app_conf['prefix'],这样在myt文件中就可以通过<% g.prefix %>输出prefix。

0 Comments:

Post a Comment

<< Home