Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save marteinn/f3c181add07654c2f3dee88cab9afc91 to your computer and use it in GitHub Desktop.
Save marteinn/f3c181add07654c2f3dee88cab9afc91 to your computer and use it in GitHub Desktop.
How to return csv in utf-8 format from a Django view

How to return csv in utf-8 format from a Django view

This is a example on how to return a utf-8 encoded csv form a django view.

import csv
import codecs

from django.contrib.auth import get_user_model
from django.views import View
from django.http import HttpResponse


User = get_user_model()


class ExportUsersView(View):
    def get(self, request, *args, **kwargs):
        response = HttpResponse(content_type="text/csv")
        response["Content-Disposition"] = 'attachment; filename="user-export.csv"'
        
        # Force response to be UTF-8 - This is where the magic happens
        response.write(codecs.BOM_UTF8)
        
        users = User.objects.all()
        header = [
            "username",
            "first_name",
            "last_name",
            "email",
        ]
        
        writer = csv.DictWriter(response, fieldnames=header)
        writer.writeheader()
        
        for user in users:
            writer.writerow(
                {
                    "username": user.username,
                    "first_name": user.first_name,
                    "last_name": user.last_name,
                    "email": user.email,
                }
            )
            
        return response
@brahim024
Copy link

thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment