我有一个如下的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类型vs django自动保存utf8有关,但我就是搞不明白!
发布于 2010-10-29 23:15:03
解决了问题!
ContentFile是cStringIO.StringIO的一个子类,它处理ASCII码文件。因此,字符串需要编码为ASCII码,因为缺省情况下,django中的所有内容都是UTF8
cf = ContentFile(rendered.encode('ascii'))https://stackoverflow.com/questions/4044903
复制相似问题