У меня есть представление в следующем виде:
def export(request, exportCSV):
if exportCSV:
...
# get a list of results named list
...
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=myfile.csv'
writer = csv.writer(response)
writer.writerow(['firstfield', 'secondfield', ... ,])
for item in list:
writer.writerow([item.firstfield, item.secondfield, ... ,])
return response
Проблема в том, что некоторые поля содержат текст на испанском языке, и такие поля вызывают следующую ошибку:
'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)
СейчасЕсли я добавлю .encode('utf8)
к оскорбительным полям, все будет хорошо:
...
for item in list:
writer.writerow([item.firstfield.encode('utf8'), item.secondfield.encode('utf8'), ... ,])
Однако добавление этого к каждому полю явно нарушает DRY.Кроме того, не каждое поле принимает эту кодировку.Если я добавляю к некоторым полям, я генерирую эту ошибку:
'int' object has no attribute 'encode'
или:
'NoneType' object has no attribute 'encode'
Так, как мне лучше всего справиться с этой первой ошибкой, при этом гарантируя, что поля не генерируют вторуютип ошибок?Должен ли я иметь дело с этим на уровне представления, или это можно позаботиться в моделях?