2009-08-29 8 views
0

userを引数として取るカスタムフィルタuser_tzがあります。どこでもうまく動作しますが、このフィルタをregroupタグで使用しようとすると、そのユーザが存在しないというエラーになります。Django再グループ化タグの問題

コード:

{CREATED_ON%での再グループ化のproj_messages.object_list | user_tz:proj_message_listの%としてユーザー}

これは私が取得していますエラーです:失敗のルックアップをキーに:レンダリング中 は、例外をキャッチ[今日の仕事]の[ユーザー]。

おかげで、 マスード・アーメド

答えて

0

は不思議でも私は、このexactissueに出くわしました。 後で私は自分のコードを変更しなければなりませんでしたが、私はその解決策を得ることができませんでした。明らかに何が起こるかは次のようなものです。

テンプレートに書き込むものは何でも、ノード、変数などとして分割されます。レンダリング時の変数は、そのインスタンスが利用できるコンテキストで検索されます。 regroupタグの場合は、利用可能なコンテキストはobject_listで、最初の引数として渡したことに注意してください。 通常のコンテキスト(あなたの場合は 'user'を含む)ではなく、テンプレート全体に対してグローバルです。だから、あなたが指定した他の変数を見つけることができません。これはあなたにはありませんobject_list

したがって、あなたのケースでは、再グループ化できるコンテキストはproj_messages.object_listのオブジェクトです。したがって、リゾルバコードはコンテキスト内で変数created_onを見つけることができますが、userでは見つけることができません。そしてそれがここでテンプレート例外を投げているのです。

あなたのobject_listuser属性を持っていれば、どうなるでしょうか?その場合、KeyErrorはありません。が、userがフィルタに渡されます。これは、渡すべき変数userではありません。リクエストに応じて

編集: 再グループタグ内のフィルタのような使用にuserを渡すために、ではない直接的な方法があります。しかし、一種のハックは明らかに機能します。注意、そのちょうどハック。 proj_messages.object_listの個々のエンティティ/オブジェクトに、ビューからのそのユーザー変数を含めるか、テンプレートのobject_listに追加のフィルタを使用させます。 しかし、それよりも良いのは、userをどこからでも利用できるようにするためには、コンテキスト外から、もう1つのハックを検討してください。チェックアウト:http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser

+0

ユーザー変数をフィルタに渡す方法はありますか? –