pyramid_handlers не работает - PullRequest
0 голосов
/ 28 сентября 2011

В настоящее время я перемещаю проект из Pylons 1.0 в Pyramid.

Моя проблема до сих пор состоит в том, как использовать спокойные маршруты в Пирамиде. В настоящее время я использую pyramid_handlers, так как это казалось хорошим началом. Я использую Akhet.

Итак, вот две важные линии в моем маршруте:

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts")
# or 
config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new")

Мое действие:

@action(name="new_account", renderer='accounts/new.mako', request_method='GET')

Ошибки:

 TypeError: 'Accounts' object is not callable
 or
 ValueError: Could not convert view return value "{}" into a response Object.

Учетные записи ... пока все хорошо, легко понять, что pyramid_handlers, кажется, не регистрирует нормально или не обрабатывает имя так, как должно ... что сказано в request.matched_route, у меня есть "new_account".

Если я добавлю "action = 'new'" в определение маршрута, он найдет функцию, но не будет слушать определение действия. Другими словами, он не сможет найти средство визуализации и ожидать объект ответа. Параметр request_method на самом деле ничего не делает, поэтому удаление его не изменит никаких результатов.

Короче говоря, @action(name="..." не работает. Пирамиде не удается найти функцию самостоятельно, и если имя функции определено, она не может выполнить оператор действия.

Понятия не имею, что я делаю не так.

Правильный способ сделать это.

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new_account")

EDIT

route_name, вероятно, будет использоваться функциями генератора URL. В то время как действие - фактическое имя в @action. Как я понял, @action name было именем маршрута, а не именем действия. Теперь это имеет больше смысла.

1 Ответ

0 голосов
/ 30 сентября 2011

Ну, для вызова add_handler нужен шаблон действия. Так что это либо добавление {action} к шаблону URL, либо установка action= в качестве аргумента. Эти действия должны соответствовать именам, определенным в @action декораторах. В вашем примере вы назвали действие new_account, но вы назвали add_handler с действием new. Таким образом, они не связаны должным образом.

...