【问题标题】:Rendering a list in a Django template在 Django 模板中呈现列表
【发布时间】:2014-11-16 00:10:33
【问题描述】:

您好,我无法在模板中显示我的列表。在控制台中,它会打印所有内容。但是,当我在 for 循环之后进行打印时,我只会得到列表的最后一行。

这是我的代码:

    if 'process_udr' in request.POST:          

        #API Url for UDR History
        apiUrl_udr ='http://apiurl'

        #API Get Variable for UDR History
        response_udr = urllib2.urlopen(apiUrl_udr)
        reader = csv.reader(response_udr)

        for udr_rows in reader:
            print udr_rows

        payload = {'usr': usr, 'usrpw': usrpw, 'response': response, 'response_2': response_2, 'response_udr': response_udr, 'udr_rows': udr_rows,}

        return render_to_response(template, payload, context_instance=RequestContext(request))                

    else:

        None

我在控制台的 for 循环中看到的打印结果:

['09/18/14', '08:00:00', '09/18/14', '08:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '57565106', '0', '0', '19854']
['09/18/14', '09:00:00', '09/18/14', '09:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '71792666', '0', '0', '20994']
['09/18/14', '10:00:00', '09/18/14', '10:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '32902589', '0', '0', '30552']
['09/18/14', '11:00:00', '09/18/14', '11:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '46560924', '0', '0', '26552']
['09/18/14', '12:00:00', '09/18/14', '12:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '76349057', '0', '0', '52998']
['09/18/14', '13:00:00', '09/18/14', '13:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '77010644', '0', '0', '20510']
['09/18/14', '14:00:00', '09/18/14', '14:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '78546837', '0', '0', '15008']
['09/18/14', '15:00:00', '09/18/14', '15:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '79770873', '0', '0', '30726']
['09/18/14', '16:00:00', '09/18/14', '16:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '75913522', '0', '0', '23696']
['09/18/14', '17:00:00', '09/18/14', '17:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '19052209', '0', '0', '17656']

这实际上是在 for 循环之后打印的内容。

['09/18/14', '17:00:00', '09/18/14', '17:00:00', 'XXXXXXXXXXX', 'GRP-XXXXXXXXXXX', 'DEFAULT', 'spostmv', '19052209', '0', '0', '17656']

这是我的模板代码:

{% for udr_row in udr_rows %}
    {{udr_row}}
{% endfor %}

非常感谢任何帮助。

【问题讨论】:

  • 我建议一个更好的标题,问题的描述。例如,“在 Django 模板中呈现列表”会提供更多信息,并有助于吸引更多人回答问题。
  • 我会更新的,谢谢你的建议。

标签: python django list csv for-loop


【解决方案1】:

您正在从 for 循环中打印为

rows = []
for udr_rows in reader:
    print udr_rows
    rows.append(udr_rows)

所以udr_rows 的值将是最后一行或reader

请更改您的有效负载以获取 reader 而不是 udr_rows

payload = {'usr': usr, 'usrpw': usrpw, 'response': response, 'response_2': response_2, 'response_udr': response_udr, 'udr_rows': rows,}

【讨论】:

  • 当我尝试使用您的解决方案修复它时。没有任何东西被传递给模板。当我尝试使用 for 循环在模板中单独显示 udr_rows 时,我得到:<_csv.reader object at>.
  • 当我尝试您的更新解决方案时。我所看到的结果是 [...][...][...] ... 垂直向下。
【解决方案2】:

udr_rows = reader

在 for... 之后应该会成功。您只打印最后一个值

【讨论】:

  • 当我这样做时,在 for 循环之后我只得到:<_csv.reader object at>.
  • 我的意思是,在您的模板中?您希望整个对象在模板中的 for 中进行迭代(除非我误解了并且您只想要对象中的 1 行)
【解决方案3】:

问题是在您使用此循环将其打印到控制台之后:

for udr_rows in reader:
    print udr_rows

文件指针位于文件末尾 - 这就是为什么没有任何内容发送到您的模板。将阅读器对象直接转换为列表,然后将其发送到您的模板:

reader = csv.reader(response_udr)
payload = {'usr': usr,
           'usrpw': usrpw,
           'response': response,
           'response_2': response_2,
           'response_udr': response_udr,
           'udr_rows': list(reader)}

您还应该使用render shortcut,并且您不需要将响应发送到您的模板;您应该启用request context processor,您的模板将自动获取请求对象。


这种解决方案有点工作,但我需要抓取每个列表,而不是放 一切都放在一个列表中,如果这有意义的话。当它从 因为,每一个都是我相信的清单。我想这样做,这样我就可以风格化 列出带有标题的表格

您在模板中得到的是一个列表列表,因此您可以很容易地用它创建一个表格:

<table>
   <thead>
      <tr>
        <th>Column 1</th>
        <th>Column 2</th>
        ...
        <th>Column N</th>
      </tr>
   </thead>
   <tbody>
      {% for row in udr_rows %}
         <tr>
         {% for item in row %}
            <td>{{ item }}</td>
         {% endfor %}
         </tr>
      {% endfor %}
   </tbody>
</table>

【讨论】:

  • 这种解决方案很有效,但我需要获取每个列表,而不是将所有内容放入一个列表中,如果这有意义的话。当它从 for 中打印出来时,我相信每一个都是一个列表。我想这样做,以便我可以将列表样式化为带有标题的表格。
猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 2020-02-05
  • 2021-06-11
  • 1970-01-01
  • 2016-12-06
  • 2019-10-27
  • 2017-03-22
  • 2020-06-15
相关资源
最近更新 更多