Django模板遍历dict并在key下呈现它的值

x8diyxa7  于 2023-05-30  发布在  Go
关注(0)|答案(2)|浏览(135)

我正在使用Django模板生成一个HTML页面,其中我正在通过一个dict,key是一个图片的URL,value是该图像的标题,我想渲染的是每行,标题位于图像的正下方,并在同一行中渲染一个dict中的所有条目(总是四个),这是我到目前为止的代码:

<div class="grid grid-cols-2 gap-2 p-2">
{% for one_metric in url_list %}
<ul>
    <tr>
    {% for url, caption in one_metric.items %}
        <td><img width="350" height="300" src="{{ url }}"></td>
        <td>{{ caption }}</td>
    {% endfor %}
    </tr>
</ul>
{% endfor %}
</div>

最后渲染的是标题列在图片的***右边***,而不是下面***,我已经通过互联网搜索,但没有弄清楚,任何建议将不胜感激!

kcrjzv8t

kcrjzv8t1#

这是因为您将注解和图像 Package 在单独的<td>元素中。这将导致标题显示在图像旁边,就像它在一行的另一个单元格中一样。您可能希望将它们保存在同一个单元格中,并将标题 Package 在<div>元素中,以确保它是该行下一行中自己的实体。您还希望在一行中从左到右呈现所有4个条目,因此使用元素<table>而不是<ul>,因为<ul>中不允许<tr>,因此它们被强制垂直而不是水平。

<div class="grid grid-cols-2 gap-2 p-2">
{% for one_metric in url_list %}
<table>
    <tr>
    {% for url, caption in one_metric.items %}
        <td><img width="350" height="300" src="{{ url }}"><div>{{ caption }}</div></td>
    {% endfor %}
    </tr>
</table>
{% endfor %}
</div>
t98cgbkg

t98cgbkg2#

有几件事出了问题
1.您正在使用CSS类来设置网格,但随后使用了表格行和单元格(TR和TD)
1.您没有TABLE标记,而是使用Unordered List UL标记。
1.默认情况下,TD单元格从左到右,但您希望单元格一个在另一个之上。
这里最简单的方法是建立一个实际的表格,并在单个单元格中包含所需的信息。这看起来像这样:

<table>
{% for one_metric in url_list %}
    <tr>
    {% for url, caption in one_metric.items %}
        <td>
            <img width="350" height="300" src="{{ url }}">
            <br>
            {{ caption }}
        </td>
    {% endfor %}
    </tr>
{% endfor %}
</table>

这将解决您的直接问题,即正确的表格,相同单元格中的元素,以及换行符,使标题从新的一行开始。如果你想使用更多语义的HTML,你可以将标题和图像关联起来:

<td>
            <figure>
                <img width="350" height="300" src="{{ url }}">
                <figcaption>{{ caption }}</figcaption>
            </figure>
        </td>

图标题是块元素,所以不需要换行符

相关问题