2012-09-03 41 views
0

所以我必須:金字塔遍歷資源URL沒有屬性__name__

resources.py:

def _add(obj, name, parent): 
    obj.__name__ = name 
    obj.__parent__ = parent 
    return obj 

class Root(object): 
    __parent__ = __name__ = None 

    def __init__(self, request): 
     super(Root, self).__init__() 
     self.request = request 
     self.collection = request.db.post 

    def __getitem__(self, key): 
     if u'profile' in key: 
      return Profile(self.request) 

class Profile(dict): 

    def __init__(self, request): 
     super(Profile, self).__init__() 
     self.__name__ = u'profile' 
     self.__parent__ = Root 
     self.collection = request.db.posts 

    def __getitem__(self, name): 
     post = Dummy(self.collection.find_one(dict(username=name))) 
     return _add(post, name, self) 

和我使用的MongoDB和pyramid_mongodb

views.py:

@view_config(context = Profile, renderer = 'templates/mytemplate.pt') 
def test_view(request): 
    return {} 

and in mytemplate.pt:

<p tal:repeat='item request.context'> 
     ${item} 
</p> 

我可以附和什麼是數據庫(我使用MongoDB的),但是當我使用的每個項目提供了一個網址resource_url()

<p tal:repeat='item request.context'> 
<a href='${request.resource_url(item)}'>${item}</a> 
</p> 

我得到了一個錯誤:'dict' object has no attribute '__name__',有人可以幫我嗎?

+1

FWIW在你的粘貼中,配置文件沒有用'dict'。如果沒有任何內容匹配而不是返回None的上下文,'Root .__ getitem__'應該引發'KeyError'。 –

+0

您可能想要更詳細地閱讀[看起來是您的出發點的博文](http://kusut.web.id/2011/03/27/pyramid-traversal-and-mongodb/)。作者使用'dict'子類有一個原因,你不會複製。 –

+0

這不是你的問題的直接原因,但'self .__ parent__ = Root'行是錯誤的''Root'是一個*類*,你需要一個*實例*的類。傳遞給你的構造函數的引用:'def __init __(self,parent,request)' – Sergey

回答

2

那麼一個完整的回溯肯定會有用。但在你的例子中,我可以至少說self.__parent__ = Root需要使用實際的對象,而不是類。