Django文件字段编码
我有一个django模型,如下所示:Django文件字段编码,django,file,utf-8,ascii,Django,File,Utf 8,Ascii,我有一个django模型,如下所示: class ExportFile(BaseExportFile): created_timestamp = models.DateTimeField(auto_now=True, editable=False) data = models.FileField(upload_to='exports') 以及一个视图函数,用于呈现模板以创建csv文件: def create_csv(request): context = C
class ExportFile(BaseExportFile):
created_timestamp = models.DateTimeField(auto_now=True, editable=False)
data = models.FileField(upload_to='exports')
以及一个视图函数,用于呈现模板以创建csv文件:
def create_csv(request):
context = Context({'data': MyModel.objects.all()})
rendered = render_to_string('mytemplate.html', context)
# create tradefile and save
cf = ContentFile(rendered)
tf = ExportFile()
tf.data.save('myfile.csv', cf)
tf.save()
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s' % 'myfile.csv'
response.write(rendered)
return response
该视图不仅将csv数据保存到文件字段,还将其返回到浏览器。我的问题是浏览器文件工作得很好,但是保存在模型上的文件大小是diff程序的两倍,当我使用diff程序时,我可以看到额外的隐藏字符。我想这一定与mime类型vs django自动保存utf8有关,但我就是搞不懂 解决了这个问题
ContentFile是cStringIO.StringIO的一个子类,它处理ASCII编码的文件。因此,字符串需要编码为ASCII,因为django中的所有内容默认为UTF8
cf = ContentFile(rendered.encode('ascii'))