PyramidのURL Dispatchは非常に強力で柔軟なメカニズムです。まず、正しい URL パターンを記述します。ルート パターン構文では、置換マーカーに
正規表現を使用できます。
'/test{ext:\\..*}'
ここで、url パスに . (ピリオド) に続いて任意の記号。を含むすべての記号。(ピリオド) は のキーの下になりextますrequest.matchdict。
もちろん、どの拡張子が存在するかを指定するために、正規表現を複雑にすることができます。
'/test{ext:\\.(html|json)}'
次に、パターンを使用してルートを追加します。
config.add_route('test',
pattern='/test{ext:\\.(html|json)}')
追加したいのは、カスタム述語を使用して拡張機能のセットを指定できることです。
デフォルトの拡張子を指定するために、単純なpregeneratorを使用できます。
def default_extension(ext):
def pregenerator(request, elements, kw):
if 'ext' not in kw:
kw['ext'] = ext
return elements, kw
return pregenerator
config.add_route('test',
pattern='/test{ext:\\.(html|json)}',
pregenerator=default_extension('.html'))
request.route_path('test')
# '/test.html'
request.route_path('test', ext='.json')
# '/test.json'
その後、トラバーサルを使用して、 htmlとjsonの出力
を切り替えることができます。
config.add_route('test',
'/test{ext:\\.(html|json)}',
pregenerator=default_extension('.html'),
traverse='{ext}')
のtraverse引数を使用して、アプリケーションをハイブリッドadd_routeにすることを強制します。また、ビューにコンテキストを提供するファクトリには、拡張機能に一致するキーを含めてはならないことを理解する必要があります。デフォルトのルート ファクトリはそうではありません。
ビュー.py:
from pyramid.view import view_config, view_defaults
@view_defaults(route_name='test')
class Test(object):
def __init__(self, request):
self.request = request
self.variables = {
'name': 'blah',
'asd': 'sdf'
}
@view_config(name='.html', renderer='mypackage:templates/blah.pt')
def html(request):
return {
'request': request,
'variables': self.variables
}
@view_config(name='.json', renderer='json')
def json(request):
return {
'request': request,
'variables': self.variables
}
ここではclass Test、ルート名を作成して指定します。そして、メソッドを拡張機能の名前で分けました。