在Django模板中为1行cod循环字典

2024-04-24 14:13:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我传递给Django模板的字典包含2个字典,每个字典都有一个列表:

'nav_dict': {
                'class_name': ['Chemical', 'Avian', 'Mammal'],
                'tab_label': ['Chemical!', 'Avian!', 'Mammal!']
                }

我想循环查看每个dict中的列表,以填写以下代码行:

^{pr2}$

其中item_className=类名列表中的每个值,item_tabLabel=选项卡标签列表中的每个值。结果是3个带有class_nametab_label的标记。在

我已经尝试过类似的方法(这段代码只处理class_name部分),但是我不能让循环附加到同一行代码中(每个<li>):

{% for key, value in nav_dict.items %}
        {% if key == 'class_name' %}

            {% for item_className in value %}
                {% if forloop.counter0 == 0 %}
                    <li class="{{ item_className }} tabSel">{{ item_tabLabel }}</li>
                {% else %}
                    <li class="{{ item_className }} tabUnsel">{{ item_tabLabel }}</li>
                {% endif %}
            {% endfor %}

        {% endif %}
    {% endfor %}

Tags: 代码name列表字典liitemtabdict
1条回答
网友
1楼 · 发布于 2024-04-24 14:13:07

如果您必须使用该字典,则可以使用以下模板代码:

{% for item_className in nav_dict.class_name %}
  {% with forloop.counter0 as index_className %}
    {% for item_tabLabel in nav_dict.tab_label %}
      {% with forloop.counter0 as index_tabLabel %}
        {% ifequal index_className index_tabLabel %}
            {% if index_className == 0 %}
                <li class="{{ item_className }} tabSel">{{ item_tabLabel }}</li>
            {% else %}
                <li class="{{ item_className }} tabUnsel">{{ item_tabLabel }}</li>
            {% endif %}
        {% endifequal %}
      {% endwith %}
    {% endfor %}
  {% endwith %}
{% endfor %}
网友
2楼 · 发布于 2024-04-24 14:13:07

你的问题在于你呈现数据的方式。在

为什么不这样创建字典,其中每个键是类名,关联的值是标签。它将更具语义和可读性。在

'nav_dict': {
    'Chemical': 'Chemical!',
    'Avian': 'Avian!',
    'Mammal': 'Mammal!,
 }

然后,您就可以在上面循环,并将key作为class属性,将value作为label属性。在

^{pr2}$

如果元素的顺序很重要(因为字典是无序的),您可以使用^{}模块中的^{}来保持插入顺序。你会在你的视野里做这样的事情。。。在

>>> from collections import OrderedDict
>>> nav_dict = OrderedDict(zip(['Chemical', 'Avian', 'Mamma!'], ['Chemical!', 'Avian!', 'Mammal!']))
OrderedDict([('Chemical', 'Chemical!'), ('Avian', 'Avian!'), ('Mammal', 'Mammal!')])

类似地,可以使用元组列表作为数据

'nav_list': [('Chemical', 'Chemical!'), ('Avian', 'Avian!'), ('Mammal', 'Mammal!')]

像这样在这个物体上循环

{% for class_name, label_name in nav_list %}
    {% if forloop.counter0 == 0 %}
        <li class="{{ class_name }} tabSel">{{ label_name }}</li>
    {% else %}
        <li class="{{ class_name }} tabUnsel">{{ label_name }}</li>
    {% endif %}
{% endfor %}

如果您只想在字符串中附加一个感叹号来创建标签,那么您当然可以创建一个自定义模板filter-或者只将感叹号附加到模板本身中。在

相关问题 更多 >