ユーザーがログインしたときの基本テンプレートがあり、その基本テンプレートにドロップダウンメニューでユーザー固有のオプションを追加する必要があります。オプション付きのこのドロップダウンメニューは、すべてのハンドラにわたって、すなわち、子テンプレートで基本テンプレートが呼び出される(拡張される)たびに一定でなければならない。PyramidとJinja 2のテンプレートでグローバルデータと関数を公開する
必要なDBクエリを実行し、クエリ結果を変数に代入し、その変数をすべてのハンドラ(多くの場合)に渡す以外に、これを1つのクエリと1つの変数にどのように統合すればよいでしょうか?基本テンプレート?私はjinja2
テンプレートも使用しています。
私は、はるかにシンプルでメンテナンスできるものと引き換えに、とても扱いにくい何かをしたくないです。
アイデア?ありがとう。
EDIT
だから私はまだ私が探しているまさに何だ何かを発見していません。しかし、私は少なくともその途中で進んでいくことに決めました。そこで、私はビューの返された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...
これは素晴らしいことですが、本当に助けてくれてありがとうございます。私は同意する、クラスベースのビューのアプローチは、よりエレガントなようです。 – JohnZ