В моем коде Pyramid я регистрирую функцию несколько раз для разных маршрутов и шаблонов. Так что мое приложение отображает те же данные в различных форматах/просмотров:Пользовательский декоратор для представлений Pyramid: функция просмотра игнорируется?
class MyViews(object):
@view_config(route_name='A', renderer='A')
@view_config(route_name='B', renderer='B')
@view_config(route_name='C', renderer='C')
@view_config(route_name='D', renderer='D')
def my_view(self):
return results
Это прекрасно работает, а потому, что у многих из этих случаев после определенной схеме, я хотел бы упростить мой код, как это:
def entity_search_method(type_name):
def decorator(fkt):
fkt = view_config(route_name = A % type_name, ...)(fkt)
fkt = view_config(route_name = B % type_name, ...)(fkt)
fkt = view_config(route_name = C % type_name, ...)(fkt)
fkt = view_config(route_name = D % type_name, ...)(fkt)
return fkt
return decorator
И потом:
class MyViews(object):
@entity_search_method('some_type')
def my_view(self):
return results
В моем понимании, это должно сделать то же самое, как вызов декораторы непосредственно. Мне даже не нужно заботиться о functools.wrap
или что-то в этом роде, потому что я даже не создаю новую функцию самостоятельно. Но Пирамида игнорирует метод. Какой-нибудь намек на то, что мне может не хватать?
Спасибо, что решил мою проблему.Поскольку я, вероятно, буду делать больше этого материала в будущем: можете ли вы указать мне на какую-то документацию, где я могу точно понять, что происходит? – Achim
Что касается view_config, он задокументирован в его API здесь http://docs.pylonsproject.org/projects/pyramid/en/latest/api/view.html#pyramid.view.view_config, но отсутствует описательные документы для расширения/оберточная бумага. Похоже, что венецианцы также не хватает документов для глубины. Просто откройте https://github.com/Pylons/venusian/issues/30, надеюсь, исправить это. –