Шаблон маршрута /model/new/{subpath}
никогда не будет соответствовать /model/new/a/b/c
, поэтому я не понимаю, почему вы сможете сгенерировать URL для этого шаблона?
Возможно передать оставшуюся часть URLкак элементы, однако.
config.add_route('new_model_route', '/model/new/{subpath}')
request.route_url('new_model_route', 'b', 'c', subpath='a')
# /model/new/a/b/c
С другой стороны, у вас есть другой вариант.Вы можете создать новый маршрут для соответствия этим URL-адресам, например:
config.add_route('new_model_route', '/model/new/*subpath')
# matches /model/new/a, /model/new/a/b, etc
request.route_url('new_model_route', subpath=('a', 'b', 'c'))
# /model/new/a/b/c
Если вы по какой-то причине не хотите сопоставлять эти URL-адреса, вы можете добавить static=True
к вызову add_route
Это означает, что вы используете route name
только для генерации URL-адресов, но не для их сопоставления во входящих запросах.
subpath
и traverse
являются специальными (это все задокументировано), но если выЕсли бы вы были склонны к использованию 'a / b / c', вы могли бы использовать что-то еще в шаблоне маршрута:
config.add_route('new_model_route', '/model/new/*rest')
# matches /model/new/a, /model/new/a/b, etc
request.route_url('new_model_route', rest='a/b/c')
# /model/new/a/b/c
О, и так как я в движении, вы можете использовать оригинальный подход с более простым URLкоторые вы уже можете иметь в вашей системе.
config.add_route('new_model_route', '/model/new')
# matches /model/new only
request.route_url('new_model_route', 'a', 'b', 'c')
# /model/new/a/b/c