私はいくつかの特徴を備えた辞書を持っています:
sort_options = SortedDict([
("importance" , ("Importance" , "warning-sign" , "importance")),
("effort" , ("Effort" , "wrench" , "effort")),
("time_estimate" , ("Time Estimate" , "time" , "time_estimate")),
])
クエリ結果としてのアクションのリストもあります。各アクションにはこれらの属性があります。テンプレートでは、{{action.effort}}または{{action.time_estimate}}を呼び出して結果を取得できます。
sort_optionsを繰り返し処理して、Twitterブートストラップアイコンを設定しています。
{% for key, icon in sort_options.items %}
<i class="icon-{{ icon.1 }}"></i>
{% endfor %}
ただし、これらの各属性のアクション値も表示したいと思います。基本的に、次のようなものです。
{% for key, icon in sort_options.items %}
<i class="icon-{{ icon.1 }}"></i>
{{ action.key }}
{% endfor %}
キーが「重要性」または「努力」に解決される場所。私はこれがうまくいかないことを知っています。だから私はこの質問で提示された解決策を活用しようとしていました。
このソリューションは、テンプレートフィルターを提案しました。
def hash(h,key):
if key in h:
return h[key]
else:
return None
register.filter(hash)
{{ user|hash:item }}
質問がそのように見える辞書を使用した場合:
{'item1': 3, 'name': 'username', 'item2': 4}
私は次のことを試しました:
{% for key, icon in sort_options.items %}
<i class="icon-{{ icon.1 }}"></i>
{{ action|hash:key }}
{% endfor %}
しかし、エラーが発生しました:
Caught TypeError while rendering: argument of type 'Action' is not iterable
これは、テンプレートフィルターが、ディクショナリ全体ではなく、オブジェクトの1つの属性(名前の可能性が高い)のみを取得しているためだと思います。
[<Action: Action_one>, <Action: Task_two>...]
テンプレートにオブジェクト全体をテンプレートタグに渡すように強制する方法はありますか?