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

一致させるために、 /groups/somegroup/membersとしましょう

名前検索部分を動的にする方法はありますか? つまり、次のようなものです。

@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

/groups/somegroup/members/groups/somegroup/addの両方がクラスのそれぞれのメソッドに解決されるようにするには?

4

1 に答える 1

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
于 2012-12-28T21:54:19.407 に答える