3

私は通常の定型リンクを含むjinjaテンプレートを持っていますが、そのうちの1つは「サインアウト」リンクです。このリンクのURLは、ページをレンダリングする前に、Users.create_logout_url()を使用して生成する必要があります。

このURLを生成して、get/postハンドラーごとにrender_responseに追加する必要はありません。私は代替案を検討しましたが、これを実行するための機能的な方法を見つけられませんでした。

BaseRequestHandler

これは最もクリーンなアプローチのように思えますが、どうすればよいかわかりません。それはの場合でしょうか

self.vars['logout_link'] = users.create_logout_url(self.request.path))

..そして、すべての標準応答ハンドラーで:

return render_response('template.html', **vars)

デコレータ

少し面倒に見えますが、これは別のオプションのようです。同じように機能すると思います(ラッパー関数でローカル変数にログアウトリンクを割り当てます)。

コンテキスト処理?

私はtipfy/jinjaを使用していますが、私が知る限り、これをサポートしていないようです。

どのパスをさらに調査する必要があるかアドバイスはありますか?

ありがとう

4

2 に答える 2

6

私はJinja/GAEと同様のことを行い、BaseHandler+含まれているテンプレートを使用します。BaseHandler:

class BaseHandler(webapp2.RequestHandler):
    ...
    def render_jinja(self, name, **data):
        data['logout_url']=users.create_logout_url(self.request.uri)
        template = jinja_environment.get_template('templates/'+name+'.html')
        self.response.out.write(template.render(data))

次に、フォームハンドラーなどのベースハンドラーを継承できます。

class FileUploadFormHandler(BaseHandler):
    def get(self):
        ...
        self.render_jinja('contact_jinja', form=form, ...
于 2011-12-01T08:27:05.950 に答える
4

どちらのフレームワークも使用していないので、テンプレートに追加するための良い方法があるかどうかわかりません。実装できるミドルウェアの形式があるかもしれませんが、私が言うように、私はそれらのフレームワークの経験がありません。

ただし、ユーザーの正しいURLに303を与えるハンドラーを使用して、ユニバーサルログアウトURLを使用することを検討しましたか?

于 2011-12-01T02:34:07.090 に答える