プロジェクトで同じものを探していたときに、このソリューションを見つけました
def add_auto_route(config,name, pattern, **kw):
config.add_route(name, pattern, **kw)
if not pattern.endswith('/'):
config.add_route(name + '_auto', pattern + '/')
def redirector(request):
return HTTPMovedPermanently(request.route_url(name))
config.add_view(redirector, route_name=name + '_auto')
そして、ルート構成中に、
add_auto_route(config,'events','/events')
するのではなくconfig.add_route('events','/events')
基本的に、それはあなたの方法のハイブリッドです。で終わる名前の新しいルート_auto
が定義され、そのビューは元のルートにリダイレクトされます。
編集
このソリューションでは、動的 URL コンポーネントと GET パラメータは考慮されていません。のような URL の場合、関数は を考慮しないため/abc/{def}?m=aasa
、 を使用add_auto_route()
するとキー エラーがスローされます。以下のコードはそれを行います。GET パラメータにアクセスするためにも使用しますredirector
request.matchdict
_query=request.GET
def add_auto_route(config,name, pattern, **kw):
config.add_route(name, pattern, **kw)
if not pattern.endswith('/'):
config.add_route(name + '_auto', pattern + '/')
def redirector(request):
return HTTPMovedPermanently(request.route_url(name,_query=request.GET,**request.matchdict))
config.add_view(redirector, route_name=name + '_auto')