1

テンプレートに表示したい時間のリストを含む辞書があります。

from django.utils.datastructures import SortedDict

time_filter = SortedDict({
    0 : "Eternity",
    15 : "15 Minutes",
    30 : "30 Minutes",
    45 : "45 Minutes",
    60 : "1 Hour",
    90 : "1.5 Hours",
    120 : "2 Hours",
    150 : "2.5 Hours",
    180 : "3 Hours",
    210 : "3.5 Hours",
    240 : "4 Hours",
    270 : "4.5 Hours",
    300 : "5 Hours"
})

テンプレートにドロップダウンを作成したい:

<select id="time_filter">
    {% for key, value in time_filter.items %}
        <option value="{{ key }}">{{ value }}</option>
    {% endfor %}
</select>

ただし、ドロップダウンの要素は、辞書で定義されている順序で処理されていません。私は何が欠けていますか?

4

4 に答える 4

5

ここを見てください。

あなたは「それはうまくいかない」ことをしている、すなわち、ソートされた辞書への入力としてソートされていない辞書を与える。

あなたが欲しい

SortedDict([
    (0, 'Eternity'),
    (15, '15 minutes'),
    # ...
    (300, '300 minutes'),
])
于 2012-03-13T20:34:30.580 に答える
5

ソートされた順序でキーを維持するPythonの多くの辞書実装の1つを使用することを検討してください。たとえば、sortedcontainersモジュールは、純粋なPythonおよびfast-as-Cの実装です。高速のget/set / iter操作をサポートし、キーをソートしたままにします。他のいくつかの一般的な選択肢に対して実装をベンチマークするパフォーマンス比較もあります。

于 2014-03-28T16:56:34.117 に答える
2

SortedDict引数として「通常」を使用してをインスタンス化しdictます。順序は失われます。SortedDict順序を保持する反復可能オブジェクトを使用してインスタンス化する必要があります。例:

SortedDict((
   (0, "Eternity"),
   (15, "15 Minutes"),
   # ...
))
于 2012-03-13T20:35:32.490 に答える
1

この回答は質問に正確に答えない場合があります。djangoテンプレートタグの「dictsort」と「dictsortreversed」を使用して、通常のdictを並べ替えることができます。したがって、SortedDictを使用する必要はありません。

于 2014-02-19T18:56:28.407 に答える