0

我需要对 dict 项目进行排序或以某种方式重新组织 html 表以根据我自己的布局显示数据。

<table>
    <tr>
        <th>title</th>
        <th>name</th>
        <th>quantity</th>
        <th>street 1</th>
        <th>street 2</th>
        <th>county</th>
        <th>city</th>
        <th>country</th>
        <th>postal</th>
        <th>shipping</th>
    </tr>

    {% for order in orders %}
    <tr>
        {% for key, value in order.items %}

        <td>
            {% if key == "title" %}
            {{value}}
            {% endif %}

            {% if key == "name" %}
            {{value}}
            {% endif %}

            {% if key == "quantity" %}
            {{value}}
            {% endif %}

            {% if key == "street1" %}
            {{value}}
            {% endif %}

            {% if key == "street2" %}
            {{value}}
            {% endif %}

            {% if key == "county" %}
            {{value}}
            {% endif %}

            {% if key == "city" %}
            {{value}}
            {% endif %}

            {% if key == "country" %}
            {{value}}
            {% endif %}

            {% if key == "postal" %}
            {{value}}
            {% endif %}

            {% if key == "shipping" %}
            {{value}}
            {% endif %}
        </td>


        {% endfor %}
    </tr>
    {% endfor %}
</table>

订单是带有字典的列表。

因为字典中的项目不再按特定顺序排列,我怎样才能将每个 dict 项目放在适当的列中?

我仍然需要在显示列标题时显示它们。从左到右 - “title”是第一个,“name”是第二个等等。

现在,城市在标题下显示,名称在数量下等等。

4

2 回答 2

1

如果您试图确保列按特定顺序排列,请不要扩展项目的键和值;而是使用点符号来根据键查找值。您已经知道哪些元素按哪个顺序排列,因此只需遍历每个项目并按照您需要的顺序访问键,将每个键放入相应的列中。

{% for order in orders %}
    <tr>
        {% for item in order.items %}
            <td>{{ item.title }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.quantity }}</td>
            <td>{{ item.street1 }}</td>
            <td>{{ item.street2 }}</td>
            <td>{{ item.county }}</td>
            <td>{{ item.city }}</td>
            <td>{{ item.country }}</td>
            <td>{{ item.postal }}</td>
            <td>{{ item.shipping }}</td>
        {% endfor %}
    </tr>
{% endfor %}

根据 Django 文档(https://docs.djangoproject.com/en/1.4/topics/templates/#variables),您可以使用点符号进行字典查找。因此,如果您在普通 python 中使用类似的东西,您可以通过Django 模板item['title']访问相同的元素。{{ item.title }}

另请注意,如果任何值是空白的,Django 模板系统不会混淆;它会优雅地忽略空/空白/不存在的值(因此您不需要 if 构造来决定是否访问数据)。根据上述链接文档:

如果您使用不存在的变量,模板系统将插入 TEMPLATE_STRING_IF_INVALID 设置的值,默认设置为 ''(空字符串)。"

于 2013-03-08T02:59:55.730 回答
0
{% for order in orders %}
<tr>
    {% for key, value in order.items %}

    <td>
        {% if key == "title" %}
        {{order.title}}
        {% endif %}

        .............
    {% endfor %}
</tr>
{% endfor %}
于 2013-03-08T03:02:18.277 回答