2011-02-02 1 views
1

私はdjangoには新しく、なぜレンダリングするための辞書オブジェクトを得ることができないのかを絶えず試みようとしています。ここでは、テンプレートのスニペットがある - デバッグのためのいくつかのpprintsで:なぜ私の辞書のようなdjangoですか?

<ul> 
     {% with req.requirement_id as reqid %} 
     req.requirement_id: {{ req.requirement_id|pprint }}<br /> 
     reqid: {{ reqid|pprint }}<br /> 
     e_quals: {{ e_quals|pprint }}<br /> 
     e_quals.reqid: {{ e_quals.reqid|pprint }}<br /> 

     {% for qual in e_quals.reqid %} 
      qual.qual_type: {{ qual.qual_type }} 
      {% if qual.qual_type == "self" %} 
      <li>Only self-endorsements.</li> 
      {% endif %} 
      {% if qual.qual_type == "other" %} 
      <li>No self-endoresements.</li> 
      {% endif %} 
      {% if qual.qual_type == "hasa" %} 
      <li>Endorser must hold an active {{ qual.qual_data }} badge.</li> 
      {% endif %} 
     {% endfor %} 
     {% endwith %} 
     </ul> 

そして、ここでは、私は出力として得るものです:

req.requirement_id: u'man_keephead' 
reqid: u'man_keephead' 
e_quals: {u'man_keephead': [<EndorsementQual: man_keephead_others>, <EndorsementQual: man_keephead_man>], u'man_trustself': [<EndorsementQual: man_trustself_self>], u'man_waiting': [<EndorsementQual: man_waiting_other>]} 
e_quals.reqid: '' 

私は本当にのように思える - そのREQID与えられていることe_qualsディクショナリ、e_quals.reqidは、そのオブジェクトのリストを生成する必要があります。私は何が欠けているのか分からない。

答えて

2

Djangoのテンプレート言語では、この種の間接的な変数解決はできません。 e_quals.req_idは常にe_quals["req_id"]と解釈されます。つまり、リテラルキーです。

あなたは単純なテンプレートフィルタを作成する必要があります:

@register.filter 
def dict_get(my_dict, key): 
    return my_dict.get(key) 


{{ e_quals|dict_get:req_id }} 
+0

良いクリーンなソリューションを! @alex djangoを初めて使う人は、このコードをどこに置くべきかを知るのに役立つでしょう。http://docs.djangoproject.com/jp/1.2/howto/custom-template-tags/を参照してください。 – meshantz

+0

ありがとう!非常にクールで役立ちます。私はカスタムテンプレートタグをやり終え、そのようにしていましたが、これははるかにクリーンです(なぜそれがうまくいかないのかを知ってうれしいです)。 – Alex

関連する問題