2017-07-29 75 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 
相關問題