{"title":"Django で CSV を出力する","version":"1.10","locale":"ja","docname":"howto/outputting-csv","url":"/ja/1.10/howto/outputting-csv/","canonical":"https://djangodocs.dev/ja/1.10/howto/outputting-csv/","summary":"このドキュメントでは、Django のビューを使って動的に CSV (Comma Separated Values) を出力する方法を説明しています。そのためには、Python のCSV ライブラリか Django のテンプレートシステムを使います。 Python の CSV ライブラリを使う Link to this…","html":"<h1>Django で CSV を出力する<a class=\"heading-anchor\" href=\"#outputting-csv-with-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントでは、Django のビューを使って動的に CSV (Comma Separated Values) を出力する方法を説明しています。そのためには、Python のCSV ライブラリか Django のテンプレートシステムを使います。</p>\n<section id=\"using-the-python-csv-library\">\n<h2>Python の CSV ライブラリを使う<a class=\"heading-anchor\" href=\"#using-the-python-csv-library\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Python の標準ライブラリには CSV のライブラリ <a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> が含まれています。Django でこのライブラリを使うコツは、<a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> モジュールの CSV 生成機能がファイルライクオブジェクトに対して働くことを利用します。Django の <a class=\"reference internal\" href=\"/ja/1.10/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> オブジェクトもまた、ファイルライクオブジェクトなのです。</p>\n<p>以下に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">csv</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">some_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Create the HttpResponse object with the appropriate CSV header.</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;text/csv&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;attachment; filename=&quot;somefilename.csv&quot;&#39;</span>\n\n    <span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">)</span>\n    <span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"s1\">&#39;First row&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Foo&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Bar&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Baz&#39;</span><span class=\"p\">])</span>\n    <span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"s1\">&#39;Second row&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;B&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;C&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;Testing&quot;&#39;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Here&#39;s a quote&quot;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n<p>コードとコメントが自分自身の意味を説明しているはずですが、いくつかの点には言及しておくべきでしょう。</p>\n<ul class=\"simple\">\n<li><p>レスポンスは特別な MIME タイプ (<em class=\"mimetype\">text/csv</em>) を受け取ります。これにより、ブラウザは、ドキュメントが HTML ではなく CSV ファイルであることを判断します。もしこの MIME タイプの設定を忘れると、ブラウザは出力を HTML と解釈し、ブラウザウィンドウに醜くて恐ろしいぐちゃぐちゃの文字列が現れてしまう恐れがあります。</p></li>\n<li><p>レスポンスには、追加の <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Disposition</span></code> ヘッダに CSV のファイル名を設定することができます。ファイル名はどんなものでも構いません。ここで指定した名前は、ブラウザが「別名で保存」ダイアログなどで使用します。</p></li>\n<li><p>CSV 生成の API に接続するのは簡単です: <code class=\"docutils literal notranslate\"><span class=\"pre\">response</span></code> を最初の引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">csv.writer</span></code> に渡すだけです。<code class=\"docutils literal notranslate\"><span class=\"pre\">csv.writer</span></code> 関数は、ファイルライクのオブジェクトを要求しますが、 <a class=\"reference internal\" href=\"/ja/1.10/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> のオブジェクトはこの要求にぴったりです。</p></li>\n<li><p>CSV ファイルの行ごとに、<code class=\"docutils literal notranslate\"><span class=\"pre\">writer.writerow</span></code> を呼んで、リストやタプルのような iterable オブジェクトを渡してください。</p></li>\n<li><p>CSV モジュールは引用を適切に処理するので、引用符やカンマでの文字列のエスケープについて心配する必要はありません。生の文字列を <code class=\"docutils literal notranslate\"><span class=\"pre\">writerow()</span></code> に渡すだけで適切に処理されます。</p></li>\n</ul>\n<aside class=\"admonition-handling-unicode-on-python-2 admonition\">\n<p class=\"admonition-title\">Python2 で Unicode を扱う</p>\n<p>Python 2 の <a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> モジュールは Unicode の入力をサポートしていません。Django は内部的に Unicode を使うので、<a class=\"reference internal\" href=\"/ja/1.10/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> のようなソースから読み出された文字列は、問題となる可能性があります。これを解決するためにはいくつかの選択肢があります:</p>\n<ul class=\"simple\">\n<li><p>全ての Unicode オブジェクトを手動でエンコードして、互換性のあるエンコーディングに変換する。</p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/2/library/csv.html#examples\">csv module's examples section</a> で提供されている <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeWriter</span></code> クラスを使う。</p></li>\n<li><p><a class=\"reference external\" href=\"https://github.com/jdunck/python-unicodecsv\">python-unicodecsv module</a> を使う。これは、Unicode を上手に処理するの <a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> を一時的に置換することを狙いとします。</p></li>\n</ul>\n<p>より詳しくは、Python ドキュメントの <a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> モジュールを参照してください。</p>\n</aside>\n<section id=\"streaming-large-csv-files\">\n<span id=\"streaming-csv-files\"></span><h3>サイズの大きな CSV ファイルをストリーミングする<a class=\"heading-anchor\" href=\"#streaming-large-csv-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>大きなサイズのレスポンスを生成するビューを取り扱うときには、代わりに Django の <a class=\"reference internal\" href=\"/ja/1.10/ref/request-response/#django.http.StreamingHttpResponse\" title=\"django.http.StreamingHttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StreamingHttpResponse</span></code></a> の使用を考えてみてください。例えば、生成に長時間を要するファイルをストリーミングことで、サーバーがレスポンスを生成している間にタイムアウトしてしまうような接続でも、ロードバランサが接続をドロップすることを防げます。</p>\n<p>この例では、Python のジェネレータを最大限使用して、サイズの大きな CSV ファイルの組み立てと伝達を効率的に扱います。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">csv</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.six.moves</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"nb\">range</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StreamingHttpResponse</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Echo</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;An object that implements just the write method of the file-like</span>\n<span class=\"sd\">    interface.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;Write the value by returning it, instead of storing in a buffer.&quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">value</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">some_streaming_csv_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;A view that streams a large CSV file.&quot;&quot;&quot;</span>\n    <span class=\"c1\"># Generate a sequence of rows. The range is based on the maximum number of</span>\n    <span class=\"c1\"># rows that can be handled by a single sheet in most spreadsheet</span>\n    <span class=\"c1\"># applications.</span>\n    <span class=\"n\">rows</span> <span class=\"o\">=</span> <span class=\"p\">([</span><span class=\"s2\">&quot;Row </span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">idx</span><span class=\"p\">),</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">idx</span><span class=\"p\">)]</span> <span class=\"k\">for</span> <span class=\"n\">idx</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">65536</span><span class=\"p\">))</span>\n    <span class=\"n\">pseudo_buffer</span> <span class=\"o\">=</span> <span class=\"n\">Echo</span><span class=\"p\">()</span>\n    <span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"p\">(</span><span class=\"n\">pseudo_buffer</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">StreamingHttpResponse</span><span class=\"p\">((</span><span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">rows</span><span class=\"p\">),</span>\n                                     <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;text/csv&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;attachment; filename=&quot;somefilename.csv&quot;&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"using-the-template-system\">\n<h2>テンプレートシステムを使う<a class=\"heading-anchor\" href=\"#using-the-template-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>もしくは、<a class=\"reference internal\" href=\"/ja/1.10/topics/templates/\"><span class=\"doc\">Django のテンプレートシステム</span></a> を使って CSV を生成することもできます。Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/csv.html#module-csv\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">csv</span></code></a> モジュールの利便性には劣りますが、完全性のために提供されています。</p>\n<p>考え方としては、テンプレートに項目のリストを渡すというものです。そして、テンプレートの <a class=\"reference internal\" href=\"/ja/1.10/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">for</span></code></a> ループの中でカンマを出力させます。</p>\n<p>以下の例は、上述の例と同じ CSV ファイルを生成します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">loader</span><span class=\"p\">,</span> <span class=\"n\">Context</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">some_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Create the HttpResponse object with the appropriate CSV header.</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;text/csv&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;attachment; filename=&quot;somefilename.csv&quot;&#39;</span>\n\n    <span class=\"c1\"># The data is hard-coded here, but you could load it from a database or</span>\n    <span class=\"c1\"># some other source.</span>\n    <span class=\"n\">csv_data</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;First row&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Foo&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Bar&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Baz&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;Second row&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;B&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;C&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;Testing&quot;&#39;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Here&#39;s a quote&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">t</span> <span class=\"o\">=</span> <span class=\"n\">loader</span><span class=\"o\">.</span><span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"s1\">&#39;my_template_name.txt&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Context</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;data&#39;</span><span class=\"p\">:</span> <span class=\"n\">csv_data</span><span class=\"p\">,</span>\n    <span class=\"p\">})</span>\n    <span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n<p>この例と上述の例の唯一の違いは、この例では CSV モジュールの代わりにテンプレートを呼び出していることです。残りのコード部分 -- 例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type='text/csv'</span></code> -- は同じです。</p>\n<p>そして、以下のテンプレートのコードを用いて、テンプレート <code class=\"docutils literal notranslate\"><span class=\"pre\">my_template_name.txt</span></code> を作成しましょう。</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">row</span> <span class=\"k\">in</span> <span class=\"nv\">data</span> <span class=\"cp\">%}</span>&quot;<span class=\"cp\">{{</span> <span class=\"nv\">row.0</span><span class=\"o\">|</span><span class=\"nf\">addslashes</span> <span class=\"cp\">}}</span>&quot;, &quot;<span class=\"cp\">{{</span> <span class=\"nv\">row.1</span><span class=\"o\">|</span><span class=\"nf\">addslashes</span> <span class=\"cp\">}}</span>&quot;, &quot;<span class=\"cp\">{{</span> <span class=\"nv\">row.2</span><span class=\"o\">|</span><span class=\"nf\">addslashes</span> <span class=\"cp\">}}</span>&quot;, &quot;<span class=\"cp\">{{</span> <span class=\"nv\">row.3</span><span class=\"o\">|</span><span class=\"nf\">addslashes</span> <span class=\"cp\">}}</span>&quot;, &quot;<span class=\"cp\">{{</span> <span class=\"nv\">row.4</span><span class=\"o\">|</span><span class=\"nf\">addslashes</span> <span class=\"cp\">}}</span>&quot;\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>このテンプレートはとても基本的なものです。与えられたデータを繰り返し処理し、行ごとに CSV の行を表示します。<a class=\"reference internal\" href=\"/ja/1.10/ref/templates/builtins/#std-templatefilter-addslashes\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">addslashes</span></code></a> を使って、引用符に問題がないことを調べます。</p>\n</section>\n<section id=\"other-text-based-formats\">\n<h2>他のテキストベースのフォーマット<a class=\"heading-anchor\" href=\"#other-text-based-formats\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ここで説明した CSV (特定の出力フォーマットの 1 つ)のような、フォーマット特有の説明は特にありません。あなたの望むテキストベースのフォーマットを出力するときには、ここで説明したテクニックを活用してみてください。また、任意のバイナリデータを生成するときにも、ここでのテクニックが参考になります; <a class=\"reference internal\" href=\"/ja/1.10/howto/outputting-pdf/\"><span class=\"doc\">Django で PDF を出力する</span></a> で例を参照してください。</p>\n</section>","rootId":"outputting-csv-with-django","toc":[{"title":"Python の CSV ライブラリを使う","anchor":"using-the-python-csv-library","children":[{"title":"サイズの大きな CSV ファイルをストリーミングする","anchor":"streaming-large-csv-files","children":[]}]},{"title":"テンプレートシステムを使う","anchor":"using-the-template-system","children":[]},{"title":"他のテキストベースのフォーマット","anchor":"other-text-based-formats","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"「How-to」ガイド","url":"/ja/1.10/howto/"}],"prev":{"docname":"howto/legacy-databases","title":"レガシーなデータベースと Django の統合","url":"/ja/1.10/howto/legacy-databases/"},"next":{"docname":"howto/outputting-pdf","title":"Django で PDF を出力する","url":"/ja/1.10/howto/outputting-pdf/"},"formats":{"html":"/ja/1.10/howto/outputting-csv/","markdown":"/ja/1.10/howto/outputting-csv.md","json":"/ja/1.10/howto/outputting-csv.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/howto/outputting-csv.txt","official":"https://docs.djangoproject.com/ja/1.10/howto/outputting-csv/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}