将模板信息导出到Excel中,然后在django中下载

时间:2014-07-29 17:51:40

标签: python django excel django-templates

我有一个显示一些信息的模板(每次打开模板时此信息都会更改,因为显示来自不同账单的数据,所以它一直在变化)这些数据在表中呈现如下:

<table id="items">
    <tr>
        <th class="tipo">Tipo de Factura</th>
        <th class="descripcion">Descripcion</th>
        <th>Precio</th>
    </tr>
    <tr class="item-row">
        <td><div><textarea>{{fact.tipo_Factura}}</textarea></div></td>
        <td class="description"><textarea>{{fact.descripcion}}</textarea></td>
        <td><span class="price">$ {{fact.importe_sin_iva}}</span></td>
    </tr>

</table>
<table id="totales">
    <tr>
        <td class="total-line">Subtotal</td>
        <td class="total-value"><div id="subtotal">$ {{fact.importe_sin_iva}}</div></td>
    </tr>
    <tr>
        <td class="total-line">Iva</td>
        <td class="total-value"><div id="total">$ {{iva}}</div></td>
    </tr>
    <tr>
        <td  class="total-line">Precio Total</td>
        <td class="total-value"><textarea id="paid">$ {{total}}</textarea></td>
    </tr>
</table>

所以现在我必须在桌子底部放置一个底部,当用户按下它时,必须将信息下载到Excel文件中并保存在用户计算机的某处。

有人有任何想法或能指出任何(正确)方向,看看如何做到这一点?

任何建议都将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

我在类似的地方有以下代码:

“放置一个底部” - 是链接,如下所示:

<a href="/some/path/report"></a>
urls.py中的

...
url(r'^/some/path/report$', file_load_view),
...
view.py

中的

from StringIO import StringIO
from csv import DictWriter

@require_http_methods(["GET"])
def file_load_view(self, request):
    f = StringIO()
    writer = DictWriter(f, ["Tipo de Factura", "Descripcion", "Precio", "Subtotal", "total", "paid"])
    writer.writeheader()
    report_line = {
        "Tipo de Factura": fact.tipo_Factura,
        "Descripcion": fact.descripcion,
        ...
    }
    writer.writerow(report_line)
    report = f.getvalue()
    resp = HttpResponse(report, mimetype="application/octet-stream")
    resp["Content-Disposition"] = "attachment; filename='{}'".format("report.csv")
    return resp

结果用户加载csv文件(它与'exel'几乎相同)包含这样的报告:

Tipo de Factura,Descripcion,Precio,Subtotal,total,paid
1,2,3,4,5,6 

如果您的磁盘上已存在报告文件report可能等于:

...
fd = open("report/path/report.csv")
report = fd.read()
...