Như một cách sạch hơn để làm điều đó, bạn có thể đăng ký một trình kết xuất đồ họa.
Trong cấu hình của bạn thiết lập, thêm:
config.add_renderer(name='csv',
factory='mypackage.renderers.CSVRenderer')
sau đó trong mypackage/renderers.py
:
class CSVRenderer(object):
def __init__(self, info):
pass
def __call__(self, value, system):
fout = StringIO.StringIO()
writer = csv.writer(fout, delimiter=';', quoting=csv.QUOTE_ALL)
writer.writerow(value['header'])
writer.writerows(value['rows'])
resp = system['request'].response
resp.content_type = 'text/csv'
resp.content_disposition = 'attachment;filename="report.csv"'
return fout.getvalue()
Sau đó, bạn có thể trang trí nhìn của bạn với các renderer:
@view_config(..., renderer='csv')
def myview(self):
header = ['name', 'surname', 'address']
rows = [
(
row['name'],
row['surname'],
row['address'],
)
for row in query_rows(.....)
]
return {
'header': header,
'rows': rows
}
Ưu điểm của phương pháp này là mã xem có thể kiểm tra tốt hơn (bạn chỉ cần kiểm tra giá trị từ điển s, không cần phải phân tích bất cứ điều gì) và bạn cũng có thể thêm một XLS hoặc bất cứ điều gì renderer đến quan điểm tương tự:
@view_config(..., renderer='xls')
@view_config(..., renderer='csv')
def myview(self):
...
Nguồn
2012-04-02 18:29:34
++ HTTP 101 FTW –