我有以下python代码:
TRAC_REQUEST_LOCATION=""
TRAC_ENV=TRAC_ENV_PARENT+"/"+re.sub(r'^'+TRAC_REQUEST_LOCATION+'/([^/]+).*', r'\1', environ['REQUEST_URI'])
environ ['REQUEST_URI']的内容类似于/ abc / DEF,我只想获得abc,但它不起作用。只有它有效,但为什么?
感谢您的任何建议。
编辑:
以下是给定答案的新代码:
def check_password(environ, user, password):
global acct_mgr, TRAC_ENV
TRAC_ENV = ''
if 'REQUEST_URI' in environ:
if '/' in environ['REQUEST_URI']:
TRAC_ENV = environ['REQUEST_URI'].split('/')[1]
else:
return None
但我得到像/ abc /或/ abc这样的TRAC_ENV,但我只需要abc部分。
代码有什么问题?
答案 0 :(得分:2)
为什么需要regexp?使用urlparse(Python 2.x,其中有一个Python 3.x链接)。
答案 1 :(得分:1)
如果要提取请求路径的第一部分,这是最简单的解决方案:
TRAC_ENV = ''
if '/' in environ['REQUEST_URI']:
TRAC_ENV = environ['REQUEST_URI'].split('/')[1]
修改强>
示例用法:
>>> def trac_env(environ):
... trac_env = ''
... if '/' in environ['REQUEST_URI']:
... trac_env = environ['REQUEST_URI'].split('/')[1]
... return trac_env
...
>>> trac_env({'REQUEST_URI': ''})
''
>>> trac_env({'REQUEST_URI': '/'})
''
>>> trac_env({'REQUEST_URI': '/foo'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/bar'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/bar/'})
'foo'
答案 2 :(得分:0)
我回到上面的代码,现在工作正常。
也许组件的更新是解决方案。