2011-06-27 50 views
4

我是金字塔的新手,並創建了一個應用程序。我有一個包含類別表的數據庫。一個類別可能是紅色和綠色屬性的顏色,另一個類別可能是屬性4和5的大小。 我希望能夠創建如下所示的鏈接:domain.com/{category}。 所以我們假設我有兩個類別模板。一個是color.mak,一個是size.mak。我如何獲得它,所以domain.com/Red或domain.com/Green會渲染color.mak和domain.com/4或domain.com/5會渲染size.mak? 閱讀URL Dispatch和Traversal之間的區別之後,似乎Traversal會成爲我想要的首選,即使它可以以任何方式完成。我真正堅持的是如何將這些類別添加到我的資源樹中。在金字塔中,使用遍歷,如何創建動態URL?

回答

6

首先,你會希望你的根資源從__getitem__返回不同的資源類型:

class Root(object): 
    def __getitem__(self, key): 
     if key in ['Red', 'Green']: 
      return ColorCategory(key) 
     elif key in ['4', '5']: 
      return SizeCategory(key) 

class ColorCategory(object): 
    ... 

class SizeCategory(object): 
    ... 

然後在您的__init__.py,你要配置不同的資源類型不同的看法(又名上下文類型):

config.add_view('myapp.views.color', 
       context='myapp:resources.ColorCategory', name='', 
       renderer='myapp:templates/color.mak') 

    config.add_view('myapp.views.size', 
       context='myapp:resources.SizeCategory', name='', 
       renderer='myapp:templates/size.mak') 

這將工作的方式是,當你得到一個特定的URL,穿越將查找特定上下文和視圖名稱。對於domain.com/Red,上下文將爲ColorCategory('Red')(因爲這是Root資源返回的內容),並且視圖名稱將爲''(因爲查找該上下文後該路徑完全消耗)。然後,金字塔將使用上下文類型和視圖名稱作爲過濾器來查找配置的視圖和模板。