Python 如何在web.py中列出所有可用的url用法
如果访问/path,我想列出所有可用的URL。任何自动方法?web.py使用偶数元素描述路径,奇数元素提供url处理程序。这就是为什么它通常写为:Python 如何在web.py中列出所有可用的url用法,python,web.py,Python,Web.py,如果访问/path,我想列出所有可用的URL。任何自动方法?web.py使用偶数元素描述路径,奇数元素提供url处理程序。这就是为什么它通常写为: urls = ( 'foo','foo','bar','bar', '/', index) 所以,诀窍就是简单地打印出偶数元素: urls = ('foo', 'foo', 'bar', 'bar', '/', index) 现在,有一些复杂问题 如果您是通过wsgi托管的,那么您的Web服务器可能只向webpy传
urls = ( 'foo','foo','bar','bar', '/', index)
所以,诀窍就是简单地打印出偶数元素:
urls = ('foo', 'foo',
'bar', 'bar',
'/', index)
现在,有一些复杂问题
如果您是通过wsgi托管的,那么您的Web服务器可能只向webpy传递前缀为例如/app的内容。所以真正的URL应该是/app/foo、/app/bar等等。你无法从你的应用程序中分辨出来。
列出的项目通常可能是正则表达式,因此生成的列表可能不是简单的URL列表。考虑仪表板/邮件的设置,状态允许三个URL:仪表板/邮件,仪表板/设置和仪表板/状态
最后,奇数编号的项(通常是字符串)可以由类web.application代替,在该类中,您可以递归到该应用程序中,以获取其所有URL。
例如:
>>> [urls[i] for i in xrange(0, len(urls), 2)]
['foo', 'bar', '/']
运行:
import web
def p(app, prefix=None):
mapping = app.mapping
for pattern, what in mapping:
if isinstance(what, basestring):
print "{}{}".format(prefix + '/' if prefix else '', pattern)
else:
p(what, prefix=pattern)
if __name__ == '__main__':
# "blog" sub-application which handles blog-related urls
blog_urls = ('create', 'blog.Create', 'edit', 'blog.Edit', 'delete', 'blog.Delete')
blog_app = web.application(blog_urls, globals())
# "main" application which handles most urls, but passed blog URL to sub-application
main_urls = ('/account', 'account', '/settings', 'settings', '/blog', blog_app)
main_app = web.application(main_urls, globals())
p(main_app)
$ python foo.py
/account
/settings
/blog/create
/blog/edit
/blog/delete