在django模板

时间:2017-04-24 05:10:37

标签: python django csv

如何将csv文件解析为django模板并按以下方式对其进行排序:

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响应是:

  

状态,日期,用户,评级

     

已注册,2016年10月12日,用户1,8 .75

     

已注册,22-05-2016,user2,9.23

     

已注册,19-11-2016,user3,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>

如果我可以按价值订购,那么用户可以按日期或评级

订购结果

2 个答案:

答案 0 :(得分:1)

在您的视图功能中执行此操作。

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

然后您将在模板中使用dict,您可以使用regroup标记重新排序。 https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#regroup

答案 1 :(得分: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>