---
title: "Conas aschur CSV a chruthú"
version: 6.1
locale: ga
source: https://docs.djangoproject.com/ga/6.1/howto/outputting-csv/
canonical: https://djangodocs.dev/ga/6.1/howto/outputting-csv/
---
# Conas aschur CSV a chruthú

Míníonn an doiciméad seo conas CSV (Luachanna Scartha Coma) a aschur go dinimiciúil ag úsáid radhairc Django. Chun seo a dhéanamh, is féidir leat leabharlann Python CSV nó an córas teimpléid Django a úsáid.

## Leabharlann Python CSV a úsáid

Tagann Python le leabharlann CSV,: mod: csv. Is é an eochair chun é a úsáid le Django ná go ngníomhaíonn cumas cruthaithe CSV an mhodúil:mod: csv ar rudaí cosúil le comhad, agus is rudaí cosúil le comhad iad rudaí djangos:class: ~django.http.http.HttpResponse.

Seo sampla:

```
import csv
from django.http import HttpResponse

def some_view(request):
    # Create the HttpResponse object with the appropriate CSV header.
    response = HttpResponse(
        content_type="text/csv",
        headers={"Content-Disposition": 'attachment; filename="somefilename.csv"'},
    )

    writer = csv.writer(response)
    writer.writerow(["First row", "Foo", "Bar", "Baz"])
    writer.writerow(["Second row", "A", "B", "C", '"Testing"', "Here's a quote"])

    return response
```

Ba chóir go mbeadh an cód agus na tuairimí féinmhínithe, ach tá cúpla rud tuillte ag lua:

- Faigheann an freagra cineál speisialta MIME,: mimetype: text/csv. Insíonn sé seo do bhrabhsálaithe gur comhad CSV é an doiciméad, seachas comhad HTML. Má fhágann tú é seo amach, is dócha go léirmhíníonn brabhsálaithe an t-aschur mar HTML, rud a bheidh mar thoradh air go mbeidh gobbledygook gránna, scanrúil i bhfuinneog an bhrabhsálaí.
- Faigheann an freagra ceannteideal breise Content-Disposition\`, ina bhfuil ainm an chomhaid CSV. Tá an t-ainm comhaid seo treallach; glaoigh air cibé rud is mian leat. Úsáidfidh brabhsálaithe é sa dialóg “Sábháil mar...”, srl.
- Is féidir leat dul isteach sa API giniúna CSV trí freagra \`\`a chur ar aghaidh mar an chéad argóint chuig \`csv.writer\`. Tá súil ag an bhfeidhm `csv.writer` réad cosúil le comhad, agus:class: ~django.http.httpResponse rudaí oiriúnach don bhille.
- I gcás gach sraith i do chomhad CSV, glaoigh ar writer.writerow\`, ag rith u:term: iterable.
- Tugann an modúl CSV aire do luachan duit, mar sin ní gá duit a bheith buartha faoi teaghráin a éalú le luachana nó camóga iontu. Pas writerow () do theagáin amh, agus déanfaidh sé an rud ceart.

### Comhaid mhóra CSV a shruthú

Agus tú ag déileáil le tuairimí a ghineann freagraí an-mhóra, b'fhéidir gur mhaith leat smaoineamh ar django's:class: ~django.http.StreamInghttPresponse a úsáid ina ionad. Mar shampla, trí chomhad a shruthú a thógann sé tamall fada chun a ghiniúint is féidir leat cothromóir ualaigh a sheachaint ag scaoileadh nasc a d'fhéadfadh a bheith curtha amach ar shlí eile agus an freastalaí ag giniúint an freagra.

In this example, we make full use of Python generators to efficiently handle
the assembly and transmission of a large CSV file. Rows are batched together
to reduce HTTP overhead and improve compression efficiency when used with
[`GZipMiddleware`](/ga/6.1/ref/middleware/#django.middleware.gzip.GZipMiddleware):

```
import csv
from itertools import batched

from django.http import StreamingHttpResponse

class Echo:
    """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 {}".format(idx), str(idx)] for idx in range(65536))
    pseudo_buffer = Echo()
    writer = csv.writer(pseudo_buffer)

    def stream_batched_rows():
        for batch in batched(rows, 100):
            yield "".join(writer.writerow(row) for row in batch)

    return StreamingHttpResponse(
        stream_batched_rows(),
        content_type="text/csv",
        headers={"Content-Disposition": 'attachment; filename="somefilename.csv"'},
    )
```

## An córas teimpléad a úsáid

De rogha air sin, is féidir leat an córas teimpléad: doc: Django a úsáid chun CSV a ghiniúint. \</topics/templates\> Tá sé seo ar leibhéal níos ísle ná an modúl áisiúil Python: MOD: csv a úsáid, ach cuirtear an réiteach i láthair anseo le haghaidh iomláine.

Is é an smaoineamh anseo liosta míreanna a chur chuig do theimpléad, agus an teimpléad a chur ar aschur na camóga in a:ttag: for lúb.

Seo sampla, a ghineann an comhad CSV céanna mar thuas:

```
from django.http import HttpResponse
from django.template import loader

def some_view(request):
    # Create the HttpResponse object with the appropriate CSV header.
    response = HttpResponse(
        content_type="text/csv",
        headers={"Content-Disposition": 'attachment; filename="somefilename.csv"'},
    )

    # The data is hardcoded here, but you could load it from a database or
    # some other source.
    csv_data = (
        ("First row", "Foo", "Bar", "Baz"),
        ("Second row", "A", "B", "C", '"Testing"', "Here's a quote"),
    )

    t = loader.get_template("my_template_name.txt")
    c = {"data": csv_data}
    response.write(t.render(c))
    return response
```

Is é an t-aon difríocht idir an sampla seo agus an sampla roimhe seo ná go n-úsáideann an ceann seo luchtú teimpléid in ionad an modúl CSV. Tá an chuid eile den chód - mar shampla an `content_type='text/csv'` \- mar an gcéanna.

Ansin, cruthaigh an teimpléad `my_template_name.txt`, leis an gcód teimpléad seo:

```html+django
{% for row in data %}"{{ row.0|addslashes }}", "{{ row.1|addslashes }}", "{{ row.2|addslashes }}", "{{ row.3|addslashes }}", "{{ row.4|addslashes }}"
{% endfor %}
```

Athraíonn an teimpléad gearr seo thar na sonraí a thugtar agus taispeánann sé líne CSV do gach sraith. Úsáideann sé an scagaire teimpléad:tfilter: addslashes chun a chinntiú nach bhfuil aon fhadhbanna le luachana.

## Formáidí téacs-bhunaithe eile

Tabhair faoi deara nach bhfuil an-shonrach ann maidir le CSV anseo - díreach an fhormáid aschuir ar leith. Is féidir leat ceachtar de na teicnící seo a úsáid chun aon fhormáid téacs-bhunaithe is féidir leat a aisling a aschur. Is féidir leat teicníc den chineál céanna a úsáid freisin chun sonraí dénártha treallach a ghiniúint; féach:doc: /howto/outputting-pdf mar shampla.
