2017-07-29 42 views

回答

1

web.py使用偶数编号的元素来描述路径,而奇数编号的元素提供了url处理函数。这就是为什么它通常写为:

urls = ('foo', 'foo', 
     'bar', 'bar', 
     '/', index) 

所以,关键是简单地打印出偶数元素:

>>> [urls[i] for i in xrange(0, len(urls), 2)] 
['foo', 'bar', '/'] 

现在,也有一些并发症。

  1. 如果您通过WSGI托管这一点,那么它可能是您的网络服务器被传递到webpy仅事情(例如)/app前缀。因此,“真实”网址应该是/app/foo,'/ app/bar'等。您无法从应用程序中告知。
  2. 您列出的项目可能(通常是)正则表达式,所以您生成的列表可能不是一个简单的URL列表。 (考虑dashboard/(mail|settings|status)将允许三个URL:dashboard/maildashboard/settingsdashboard/status
  3. 最后,奇数项,而通常是字符串,可以替代由web.application类,在其中你会递归到该应用程序,其所有网址以及

例如:

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 
相关问题