Loading docs/howto/outputting-csv.txt +40 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,46 @@ For more information, see the Python documentation of the :mod:`csv` module. .. _`csv module's examples section`: http://docs.python.org/library/csv.html#examples .. _`python-unicodecsv module`: https://github.com/jdunck/python-unicodecsv .. _streaming-csv-files: Streaming large CSV files ~~~~~~~~~~~~~~~~~~~~~~~~~ When dealing with views that generate very large responses, you might want to consider using Django's :class:`~django.http.StreamingHttpResponse` instead. For example, by streaming a file that takes a long time to generate you can avoid a load balancer dropping a connection that might have otherwise timed out while the server was generating the response. In this example, we make full use of Python generators to efficiently handle the assembly and transmission of a large CSV file:: import csv from django.utils.six.moves import range from django.http import StreamingHttpResponse class Echo(object): """An object that implements just the write method of the file-like interface. """ def write(self, value): """Write the value by returning it, instead of storing in a buffer.""" return value def some_streaming_csv_view(request): """A view that streams a large CSV file.""" # Generate a sequence of rows. The range is based on the maximum number of # rows that can be handled by a single sheet in most spreadsheet # applications. rows = (["Row {0}".format(idx), str(idx)] for idx in range(65536)) pseudo_buffer = Echo() writer = csv.writer(pseudo_buffer) response = StreamingHttpResponse((writer.writerow(row) for row in rows), content_type="text/csv") response['Content-Disposition'] = 'attachment; filename="somefilename.csv"' return response Using the template system ========================= Loading docs/ref/request-response.txt +1 −1 Original line number Diff line number Diff line Loading @@ -909,7 +909,7 @@ StreamingHttpResponse objects The :class:`StreamingHttpResponse` class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory. For instance, it's useful for generating large CSV files. :ref:`generating large CSV files <streaming-csv-files>`. .. admonition:: Performance considerations Loading Loading
docs/howto/outputting-csv.txt +40 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,46 @@ For more information, see the Python documentation of the :mod:`csv` module. .. _`csv module's examples section`: http://docs.python.org/library/csv.html#examples .. _`python-unicodecsv module`: https://github.com/jdunck/python-unicodecsv .. _streaming-csv-files: Streaming large CSV files ~~~~~~~~~~~~~~~~~~~~~~~~~ When dealing with views that generate very large responses, you might want to consider using Django's :class:`~django.http.StreamingHttpResponse` instead. For example, by streaming a file that takes a long time to generate you can avoid a load balancer dropping a connection that might have otherwise timed out while the server was generating the response. In this example, we make full use of Python generators to efficiently handle the assembly and transmission of a large CSV file:: import csv from django.utils.six.moves import range from django.http import StreamingHttpResponse class Echo(object): """An object that implements just the write method of the file-like interface. """ def write(self, value): """Write the value by returning it, instead of storing in a buffer.""" return value def some_streaming_csv_view(request): """A view that streams a large CSV file.""" # Generate a sequence of rows. The range is based on the maximum number of # rows that can be handled by a single sheet in most spreadsheet # applications. rows = (["Row {0}".format(idx), str(idx)] for idx in range(65536)) pseudo_buffer = Echo() writer = csv.writer(pseudo_buffer) response = StreamingHttpResponse((writer.writerow(row) for row in rows), content_type="text/csv") response['Content-Disposition'] = 'attachment; filename="somefilename.csv"' return response Using the template system ========================= Loading
docs/ref/request-response.txt +1 −1 Original line number Diff line number Diff line Loading @@ -909,7 +909,7 @@ StreamingHttpResponse objects The :class:`StreamingHttpResponse` class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory. For instance, it's useful for generating large CSV files. :ref:`generating large CSV files <streaming-csv-files>`. .. admonition:: Performance considerations Loading