2

私は口述を持っています:

 >>> some_dict
{1: ['String1', 'String2', 'String3','String4' ],
 2: ['String1_2', 'String2_2', 'String3_2', 'String4_2' ],}

私のテンプレートでは、この dict を繰り返し処理し、値を html に表示したいと考えています。だから私はビューからこのdictを送った:

return render_to_response('tournament.html', 
        {.....
        'some_dict' : some_dict,
        'some_dict_range' : range(4),
             .....
        })

tourment.html で、some_dict を繰り返し処理しようとしています。次のような出力を取得したい:

'String1', 'String2', 'String3','String4'

 {% for iter1 in some_dict_range%}         
{{some_dict.0.iter1}}<br>{% endfor %}

その結果、何も得られません。しかし、イテレータなしで同じ結果を取得しようとすると、some_dict.0.0、some_dict.0.1 など必要なもの ('String1'、'String2'、'String3'、'String4') が得られます。そして、「iter1」の値を表示しようとすると、正しい数字が得られます:

 {% for iter1 in some_dict_range%}         
{{iter1}}<br>  {% endfor %}

0、1、2 ... なぜこのように動作しないのですか? もし私がこれのデザインを間違えたら、どのように見えるべきですか? つまり、この dict を反復処理して値を html-template に表示する正しい方法は何ですか?

4

1 に答える 1

6

してはいけないこと:

{{some_dict.0.iter1}}<br>{% endfor %}

なれ:

{{some_dict.iter1.0}}<br>{% endfor %}
            ^^^^^^^

それ以外の場合は、存在しない some_dict[0] にアクセスしようとしています...

範囲を渡さないようにするには (dict をキー順に出力したいと思っていると思います)、次を使用できます。

{% for k, v in some_dict.items|sort %}
    Position {{ k }} has a first value of {{ v.0 }} and has:<br>
    {{ v|join:"<br/>" }}
    {% for item in v %}
        {{ item }}
    {% endfor %}
{% endfor %}
于 2012-07-29T11:29:56.777 に答える