9

カスタムコンテキストプロセッサでビューによって渡された現在のコンテキストにアクセスして、既存の変数をオーバーライドするのではなく、必要に応じて不足している変数を追加できる方法はありますか?

私が達成しようとしていること:

この /city_slug/ のような URL を作成し、コンテキストに都市変数が既に存在するかどうかを確認したい、そうでない場合はコンテキストに都市を追加したい (セッション変数に保存されている最後に使用された都市を使用している可能性がある、そうでない場合はデフォルトでいくつかの都市に設定されている可能性がある)次回の使用のためにセッション変数を設定することさえできます。)

これは非常に一般的な問題だと思います。皆さんはどのように解決しますか?

4

4 に答える 4

2

これは、 TemplateResponseおよびTemplateResponseミドルウェアを使用して実現できます。

于 2012-02-12T01:36:24.443 に答える
2

コンテキストプロセッサ内から現在のコンテキストにアクセスすることはできません。また、ミドルウェアも適切なソリューションではないと思います。おそらく、ビューで使用する独自のテンプレートレンダリング関数を作成し、常にコンテキストと現在のリクエストを渡し、必要な機能をその中に入れて、通常のレンダリング関数djangoで最後にテンプレートをレンダリングするのが理にかなっています。あなたに提供します!

于 2010-10-03T23:51:43.663 に答える
1

カスタム テンプレート コンテキスト プロセッサがこれを実行できるかどうかはわかりません。ドキュメントから:

コンテキスト プロセッサのインターフェイスは非常に単純です。これは、1 つの引数 HttpRequest オブジェクトを受け取り、テンプレート コンテキストに追加される辞書を返す単なる Python 関数です。各コンテキスト プロセッサは辞書を返す必要があります。

(強調鉱山)。

代わりに、カスタム ミドルウェアの作成を検討する必要があります。コンテキスト プロセッサにこれを実行させる方法を誰かが知っている場合は、知りたいです。

于 2010-10-03T17:26:14.147 に答える
0

Django コンテキスト プロセッサではこれを行うことはできません。リクエスト オブジェクトにのみアクセスでき、結果が追加される既存のテンプレート コンテキストにはアクセスできません。

必要に応じて、都市をセッションに保存することは問題ないように思えます。テンプレートは、それ以上のデフォルトに対して責任があります。何か凝ったものが必要な場合は、再利用可能なカスタム テンプレート タグでラップすることを検討してください。

于 2010-10-03T17:44:46.040 に答える