Domanda

Ho un dizionario con un elenco di volte che voglio visualizzare in un modello:

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"
})
.

Voglio creare una caduta nel modello:

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

Ma gli elementi nel discesa non stanno arrivando nell'ordine definito nel dizionario.Cosa mi manca?

È stato utile?

Soluzione

guarda qui .

stai facendo il "che non funziona" cosa, I.e. dando un dizionario obant come ingresso al dizionario ordinato.

vuoi

SortedDict([
    (0, 'Eternity'),
    (15, '15 minutes'),
    # ...
    (300, '300 minutes'),
])
.

Altri suggerimenti

Considera l'utilizzo di una delle molte implementazioni del dizionario di Python che mantengono le chiavi in ordine ordinato.Ad esempio, il Modulo di ordinamentoContainers è implementazioni Pure-Python e Fast-AS-C.Supporta le operazioni rapide Get / Set / ITER e mantiene le chiavi ordinate.C'è anche un Confronto performance che benchmarks l'implementazione contro diverse altre scelte popolari.

.

Si istanziare il SortedDict con un dict "normale" come argomento - il tuo ordine è perso.Devi istanziare il SortedDict con un iterabile che preserva l'ordinazione, ad esempio.:

SortedDict((
   (0, "Eternity"),
   (15, "15 Minutes"),
   # ...
))
.

Questa risposta potrebbe non rispondere esattamente alla domanda, è possibile utilizzare "DictSort" e "DictSorTreversed" dai tag del modello Django per ordinare il timbro normale.Quindi non è necessario utilizzare Sorteddict.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top