Python 为什么我的字典在django模板中无序?

Python 为什么我的字典在django模板中无序?,python,django,dictionary,Python,Django,Dictionary,我已经手动订购了一本名为lang\u selection\u list的字典。我想循环查看该列表,并使用键val设置选择/选项标记 问题:我的循环创建的输出似乎是随机顺序的,我不知道为什么 问题:如何循环语言选择列表,使选项的顺序与我编写它们时的键值顺序相同 {% var as lang_selection_list %} { "af_ALL": "Afrikaans", "az_ALL": "Azərbaycanca", "id_ALL": "Bahasa Indonesia",

我已经手动订购了一本名为
lang\u selection\u list
的字典。我想循环查看该列表,并使用
键val
设置
选择/选项标记

问题:我的循环创建的输出似乎是随机顺序的,我不知道为什么

问题:如何循环
语言选择列表
,使选项的顺序与我编写它们时的键值顺序相同

{% var as lang_selection_list %}
{
  "af_ALL": "Afrikaans",
  "az_ALL": "Azərbaycanca",
  "id_ALL": "Bahasa Indonesia",
  "ca_ALL": "Català",
  "si_ALL": "සිංහල",
}
{% endvar %}

    <select>
      {% for key,val in lang_selection_list.items %}
      <option value="/{{key}}/index.html">{{val}}</option>
      {% endfor %}
    </select>
{%var as lang\u selection\u list%}
{
“af_ALL”:“南非荷兰语”,
“azəu ALL”:“azərbaycanca”,
“全部”:“印度尼西亚语”,
“所有人”:“加泰罗尼亚”,
“所有人”:සිංහල",
}
{%endvar%}
{%为键,语言选择列表中的val.items%}
{{val}}
{%endfor%}

如注释中所述,常规词典没有顺序,无法对其进行排序

有不同的方法:

  • 有条不紊
  • 不要在模板中创建,而是在视图中创建,并将其添加到上下文中。如果在多个视图中需要它,请创建一个上下文处理器,将其添加到所有视图中。如果选择这种方式,则可以保留现有的for循环。创建OrderedDict的过程如下所示:

    langs = OrderedDict([
        ("af_ALL", "Afrikaans"),
        ("az_ALL", "Azərbaycanca"),
        ("id_ALL", "Bahasa Indonesia"),
        ("ca_ALL", "Català"),
        ("si_ALL", "සිංහල"),
    ])
    
    请参见上下文处理器上的

  • 模板溶液
  • 如果您确实想在模板中创建该列表,则必须将其结构更改为真实列表。您可以将其更改为元组列表或字典列表

    使用字典列表可以使用内置的模板
    dictsort
    。请查看文档:

    注:


    就个人而言,我建议不要在模板中创建任何数据结构。将这些数据结构移动到单独的位置,或者移动到一个常规的文本文件中,从中加载它(您可以使用json或yaml来构造它),甚至创建一个模型,使其可通过Django管理员进行维护。

    可能的副本无法订购标准的
    dict
    。您必须使用
    OrderedDict
    来“手动订购”字典。如果您想要键值对列表,请使用键值对列表!Dicts是一种查找结构。它们并不适用于所有涉及键和值的用例。@user2357112我如何在django keyvalue中编写变量?
    [(键1,值1),(键2,值2),…]