在Django模板中呈现列表

时间:2014-09-22 05:18:26

标签: python django list csv for-loop

您好,我无法在模板中显示我的列表。在控制台中它打印所有。但是当我在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 %}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

udr_rows = reader

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

答案 1 :(得分:2)

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

for udr_rows in reader:
    print udr_rows

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

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>

答案 2 :(得分: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,}