我有一个 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 = 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 数据保存到 FileField,还将其返回到浏览器。我遇到的问题是浏览器文件工作正常,但保存在模型上的文件大小是原来的两倍,当我使用 diff 程序时,我可以看到额外的隐藏字符。我认为这一定与 mime 类型与 django 自动保存 utf8 有关,但我就是不明白!
解决了问题!
ContentFile 是 cStringIO.StringIO 的子类 - 它处理 ASCII 编码文件。因此,该字符串需要编码为 ASCII,因为 django 中的所有内容默认都是 UTF8
cf = ContentFile(rendered.encode('ascii'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)