Django模板中的For循环只是重复字典中的最后一个值

瑞安·托马斯

我正在从我在模板中循环的 API 接收数据。每个值都很好,但日期。

因为模板不能将日期格式化为字符串,所以我在我的视图中对其进行了格式化(如下所示)。但是现在当我将该日期时间变量传递到我的模板中时,它只为每次迭代显示相同的日期,其他所有值都是正确的。

如何正确迭代日期?

谢谢!

    for game in games:
        date = game['schedule']['date']
        datetime_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%fZ')
        game_date = datetime_date.strftime('%B %d, %Y')
        game_time = datetime_date.strftime('%-I:%M %p')
        
    context = {
        'games': games,
        'game_date': game_date,
        'game_time': game_time
    }

    return render(request, 'games/games.html', context)
    {% for game in games %}    
          <div class="col-12 col-lg-6 mb-4">
              <div class="gamecard p-2">
                   <div class="row">
                        <div class="col-12">
                             <h3 class="game-summary white opacity-90 text-center font-800 mb- 
                                       0">{{ game.summary }}
                             </h3>
                             <p class="white opacity-90 mb-0 text-center">
                                   {{ game_date }} 
                                   {{ game_time }}
                             </p>
                             <p class="white opacity-90 mb-2 text-center"><small>
                                {{ game.venue.name }} - {{ game.venue.city }},
                                {{ game.venue.state }}</small>
                             </p>
                        </div>    
                  </div>    
                     
    {% endfor %}
罗宾·齐格蒙德

问题是在你的循环中,在视图中:

for game in games:
    date = game['schedule']['date']
    datetime_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%fZ')
    game_date = datetime_date.strftime('%B %d, %Y')
    game_time = datetime_date.strftime('%-I:%M %p')

您不断地覆盖变量的值game_dateand game_time), (还有dateand datetime_date,但这些并不重要,因为它们只是您不在循环外使用的临时值),等等。所以不可避免地,当你稍后访问它时——在模板中,正如它发生的那样——它具有从games数组的最后一个元素计算的值

从您的模板中,您显然不希望这些是单个变量,每个变量都保存一个值 - 您希望它们存在,具有不同的值,用于列表的每个元素。由于game无论如何每个显然都是一个字典,因此最简单的方法是简单地将数据添加到具有您需要的属性的那些字典中。

for game in games:
    date = game['schedule']['date']
    datetime_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%fZ')
    game['game_date'] = datetime_date.strftime('%B %d, %Y')
    game['game_time'] = datetime_date.strftime('%-I:%M %p')

然后在模板中,而不是

{{ game_date }}
{{ game_time }}

像这样使用它:

{{ game.game_date }}
{{ game.game_time }}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

循环遍历字典键中的最后一个值而不是字典中的所有值

如何检查迭代的内容是否是字典中的最后一个键/值?(可能需要在Django模板中完成)

For循环避免在字典中写入最后一个键

获取django模板中条件的最后一个for循环迭代

如何在Django模板的字典中获得第一个值?

For循环仅在Django中的一个模板中工作

Python for 循环只返回字典的最后一个值

如何访问包含列表作为值的字典中列表值中的最后一个元素

为什么输出只是最后一个值?Oracle 循环游标

只有 for 循环迭代的最后一个结果被保存在字典中

从具有重复值的字典中,如何创建一个不包含重复的新字典,并在字典中增加一个计数器?

在Django模板的另一个字典中迭代一个键的字典

如何仅修复Java ArrayList中重复的循环中的最后一个对象

Mysql 左连接,左表中没有重复的值,其中的最后一个值

PowerShell for循环不添加先前循环数组中的最后一个值

如何将字典中的重复值合并为一个值

删除 django 模板循环最后一项的最后一个字符

删除CSV中包含一个重复值的连续行,但保留最后一行

所有值都被 For 循环 TypeScript 中的最后一个值替换

循环内的onclick值仅适用于表中的最后一个值

在R中从列的第一个值到列的最后一个值循环

Django For循环在模板文件中的另一个for循环中

删除PHP多维数组中特定键的重复值,但要删除最后一个?

将键和值添加到数组中的最后一个重复对象

如何将所有值(而不只是最后一个值)从循环写入文件?

将单元格中的最后一个值重复到最后一行的末尾

python:从列表中获取最后一个匹配的字典

Python字典中的最后一个键

从另一个字典中删除重复值