4

私はWebframeworkPyramidとURLDispatchを使用しており、次のような多くのルートを定義しました。

config.add_route('login', '/login')
config.add_route('logout', '/logout')

次に、クエリ文字列に何かを追加して、次のURLで作成されるようにします。

request.route_url('login')

実際に

/login?foo=bar

これは、書き込みを避けるためにプロジェクトベースで実行する必要があります

request.route_url('login', _query={'foo': 'bar'})

URLを作成したいときはいつでも。

これを行うのに適切な場所はどこですか?どういうわけかpyramid.requestクラスから継承し、route_urlメソッドを上書きする必要がありますか?使用できるイベントやフックはありますか?

4

2 に答える 2

0

このサイトの議論に基づいて、次のソリューションを実装しました。

from pyramid.request import Request as OldRequest

class Request(OldRequest):
    def route_url(self, route_name, *elements, **kw):
        qs = kw.get('_query', {})
        if 'hid' in qs: raise Exception('hid exists in query string')
        qs['hid'] = 1337
        kw['_query'] = qs
        return self.route_without_hid(route_name, *elements, **kw)

    def route_url_without_hid(self, route_name, *elements, **kw):
        return super(Request, self).route_url(route_name, *elements, **kw)

また、hid を持たない URL を作成する可能性も残されています。

于 2013-02-23T18:16:00.913 に答える