2017-04-24 52 views
1

如何解析CSV文件导入Django的模板,并通过对它们进行排序:解析和订单csv文件

myfile.csv

status, date, user, rating 

Registered, 12-10-2016, user1, 8.75 

Registered, 22-05-2016, user2, 9.23 

Registered, 19-11-2016, user3, 7.00 

目前,我试图做这样的事情:


Views.py

args = {} 
file_url = urllib2.Request("http://server.local:8000/static/myfile.csv", None, {'User-Agent': 'Mozilla/5.0'}) 
file_url_response = urllib2.urlopen(file_url) 
pre_reader = csv.reader(file_url_response) 
args['list'] = pre_reader 
return render_to_response('template.html', args) 

template.html

{% for row in list %} 
<p> 
    {% for item in row %} 
     {{ item }} 
    {% endfor %} 
</p> 
{% endfor %} 

渲染HTML的响应是:

状态,日期,用户评级

注册,12-10 -2016,user1,8.7 5

注册,22-05-2016,用户2 9.23

注册,19-11-2016,用户3,7.00


但我想这样做:

<table> 
{% for row in list %} 
<tr> 
    <td> 
     {{ row.status }} 
    </td> 
    <td> 
     {{ row.date }} 
    </td> 
    <td> 
     {{ row.user }} 
    </td> 
    <td> 
     {{ row.rating }} 
    </td> 
</tr> 
{% endfor %} 
</table> 

而且这将是巨大的,如果我能值排序,让用户可以按日期或评价

结果3210

回答

1

在你的视图函数中做到这一点。

... 
csv_dict = {rows[0]:rows[1] for rows in pre_reader} 
args['csv_dict'] = csv_dict 
... 

然后,你将在你的模板字典,你可以重新排序使用regroup标签。 https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#regroup

+0

您可以延长你的答案,有例子可以是? –

+0

关于重组? –

0

您可以使用类似{{row.0}},见Variables and lookups,只是改变你的模板 template.html

<table> 
{% for row in list %} 
<tr> 
    <td> 
     {{ row.0 }} 
    </td> 
    <td> 
     {{ row.1 }} 
    </td> 
    <td> 
     {{ row.2 }} 
    </td> 
    <td> 
     {{ row.3 }} 
    </td> 
</tr> 
{% endfor %} 
</table> 
+0

对不起,但它不符合需求,因为这样我有第n列的所有值,而不是行(不知道为什么它是如此) –