2012-12-28 94 views
1

在使用遍歷url查找的金字塔中,是否有可能讓視圖查找算法檢查類的方法名稱。例如,我可以做這樣的事情:使用方法名稱的金字塔遍歷視圖查找

@view_defaults(context=models.Group) 
class GroupView(object): 
    def __init__(self, context, request): 
     self.context = context 
     self.request = request 

    @view_config(name='members') 
    def members(self): 
     pass 

匹配假設/組/ somegroup /會員

有沒有一種方法,使名稱查找部分動態?也就是說,這樣的事情:

@view_defaults(context=models.Group) 
class GroupView(object): 
    def __init__(self, context, request): 
     self.context = context 
     self.request = request 

    def members(self): 
     pass 

    def add(self): 
     pass 

這樣既/組/ somegroup /會員/組/ somegroup /加都將解決各自的類的方法?

+0

你必須自己做。不要忘記,視圖定義不僅僅是將URL映射到方法,還可以指定謂詞和呈現選項。當你將其構建出來的時候,你將會在每次觀看的基礎上失去所有酷炫的東西。 –

回答

3

不能說這是best的方式(我對金字塔一無所知);但一個選擇可能是用裝飾器來裝飾該類,該裝飾器適當地裝飾方法名稱。例如。

import inspect 

def config_wrap(func, name): 
    @view_config(name=name) 
    def wrapped(*args, **kwargs): 
     return func(*args, **kwargs) 
    return wrapped 

def dynamic_names(cls): 
    for name, m in inspect.getmembers(cls, inspect.ismethod): 
     setattr(cls,name,config_wrap(m, name)) 
    return cls 


@dynamic_names 
@view_defaults(context=models.Group) 
class GroupView(object): 
    def __init__(self, context, request): 
     self.context = context 
     self.request = request 

    def members(self): 
     pass 

    def add(self): 
     pass 
+0

我自己知道金字塔,這是我會去做的。 –

+0

我想過這樣做,我希望能有這樣做的內置方式。哦,我可能會走這條路。 – Falmarri