ユーザーがログインしたときの基本テンプレートがあり、その基本テンプレートで、ドロップダウン メニューにユーザー固有のオプションを追加する必要があります。オプションを含むこのドロップダウン メニューは、すべてのハンドラーで一定でなければなりません。つまり、基本テンプレートが子テンプレートで呼び出される (拡張される) ときはいつでもです。
必要な DB クエリを実行し、クエリ結果を変数に割り当て、その変数をすべてのハンドラー (多数あります) に渡す以外に、これを 1 つのクエリと 1 つの変数に統合して、ベース テンプレートに直接渡すにはどうすればよいでしょうか? 私jinja2
もテンプレートを使用しています。
はるかにシンプルで保守しやすいものと引き換えに、それほど面倒なことをするのは嫌です。
何か案は?ありがとう。
編集
そのため、探しているものとまったく同じものはまだ見つかりません。ただし、暫定的に少なくともある程度の前進を遂げることにしました。そこで、ビューから返された dict() を受け取り、それに適切なデータを追加するカスタム デコレータを作成しました。例えば:
def get_base_data(func):
def wrapper(request):
d = func(request)
user_id = request.user.id # used in query
contact_group_data = ContactGroups.query.filter(...criteria...).all()
d['contact_group_data'] = contact_group_data
return d
return wrapper
これで、次のように記述することで、少なくとも各メソッドを非常に簡潔かつ簡単に装飾できます。
@view_config(...)
@get_base_data
def my_handler(request):
pass # rest of code...