【问题标题】:Django how to render dictionary in the templateDjango如何在模板中渲染字典
【发布时间】:2018-09-05 12:31:41
【问题描述】:

我有这本词典

data={
    'user': user.username,
    'punti_capitano': {'nome_capitano':team.capitano.display_name,'lista_punti':point_cap_list},
    'punti_rider2': {'nome_rider2':team.rider_2.display_name,'lista_punti':point_rider2_list},
    'punti_rider3': {'nome_rider3':team.rider_3.display_name,'lista_punti':point_rider3_list},
    'punti_rider4': {'nome_rider4':team.rider_4.display_name,'lista_punti':point_rider4_list},
    'punti_rider5': {'nome_rider5':team.rider_5.display_name,'lista_punti':point_rider5_list},
    'punti_rider6': {'nome_rider6':team.rider_6.display_name,'lista_punti':point_rider6_list},
    'punti_rider7': {'nome_rider7':team.rider_7.display_name,'lista_punti':point_rider7_list},
    'punti_rider8': {'nome_rider8':team.rider_8.display_name,'lista_punti':point_rider8_list},
    'punti_rider9': {'nome_rider9':team.rider_9.display_name,'lista_punti':point_rider9_list},
}

现在我想创建一个包含所有这些元素的HTML 表。我该怎么做?

我试过这样:

<h3>Capitano :{{data.punti_capitano.nome_capitano}} Totale:{{data.punti_capitano.lista_punti.TOT}}</h3>
{% for key,value in data.punti_capitano.lista_punti.items %}
    {% if key != 'TOT' %}
        {{key}} : {{value}}
    {% endif %}
{%endfor%}
<h3>rider_2 :{{data.punti_rider2.nome_rider2}} Totale:{{data.punti_rider2.lista_punti.TOT}}</h3>
{% for key,value in data.punti_rider2.lista_punti.items %}
    {% if key != 'TOT' %}
        {{key}} : {{value}}
    {% endif %}
{%endfor%}
<h3>rider_3 :{{data.punti_rider3.nome_rider3}} Totale:{{data.punti_rider3.lista_punti.TOT}}</h3>
{% for key,value in data.punti_rider3.lista_punti.items %}
    {% if key != 'TOT' %}
        {{key}} : {{value}}
    {% endif %}
{%endfor%}

etc etc

但我想要更自动的东西

【问题讨论】:

  • 到目前为止你有没有尝试过?向我们展示您的尝试以及您遇到的问题。
  • 我更新了问题

标签: python django django-templates


【解决方案1】:

在模板中调用上下文字典后,您只需使用 django 模板语言在该字典上循环即可。

例如:

<table>
{% for element in data %}
 <tr>
    <td>element.user</td>
  </tr>
{% endfor %}
</table>

【讨论】:

  • 请注意,变量element 将保存键但不保存字典的值;你可以改用for k, v in data.items(假设Python 3.x)。
【解决方案2】:

我建议,如果可以的话,您应该以不同的方式构建数据;否则必须有很多 if/else。这应该在您看来完成。

可能是这样的结构,其中所有相似的项目都分组在一个列表中:

data = {
    'user': user.username,
    'punti_capitano': {'nome': team.capitano.display_name, 'lista_punti': point_cap_list},
    'punti_rider_list': [
        {'id': 2, 'nome': team.rider_2.display_name, 'lista_punti': point_rider2_list},
        {'id': 3, 'nome': team.rider_3.display_name, 'lista_punti': point_rider3_list},
        {'id': 4, 'nome': team.rider_4.display_name, 'lista_punti': point_rider4_list},
        {'id': 5, 'nome': team.rider_5.display_name, 'lista_punti': point_rider5_list},
        {'id': 6, 'nome': team.rider_6.display_name, 'lista_punti': point_rider6_list},
        {'id': 7, 'nome': team.rider_7.display_name, 'lista_punti': point_rider7_list},
        {'id': 8, 'nome': team.rider_8.display_name, 'lista_punti': point_rider8_list},
        {'id': 9, 'nome': team.rider_9.display_name, 'lista_punti': point_rider9_list},
    ],
}

然后在模板中你可以使用这样的东西来显示常见的项目:

<table>
    <tr>
        <td>
            Capitano: {{ data.punti_capitano.nome }}
        </td>
        <td>
            Totale: {{ data.punti_capitano.lista_punti.TOT }}
        </td>
        <td>
        {% for k,v in data.punti_capitano.lista_punti.items %}
            {% if k != 'TOT' %}
            <p>{{ k }}: {{ v }}</p>
            {% endif %}
        {% endfor %}
        </td>
    </tr>
{% for rider in data.punti_rider_list %}
    <tr>
        <td>
            rider_{{ rider.id }}: {{ rider.nome }}
        </td>
        <td>
            Totale: {{ rider.lista_punti.TOT }}
        </td>
        <td>
        {% for k,v in rider.lista_punti.items %}
            {% if k != 'TOT' %}
            <p>{{ k }}: {{ v }}</p>
            {% endif %}
        {% endfor %}
        </td>
    </tr>
{% endfor %}
</table>

您需要根据具体情况对其进行调整,但这应该会给您一个大致的方向。

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2017-10-13
    • 2020-04-23
    相关资源
    最近更新 更多