gpt4 book ai didi

Django FileField编码

转载 作者:行者123 更新时间:2023-12-04 14:42:52 24 4
gpt4 key购买 nike

我有一个 django 模型如下:

class ExportFile(BaseExportFile): 
created_timestamp = models.DateTimeField(auto_now=True, editable=False)
data = models.FileField(upload_to='exports')

和一个呈现模板以创建 csv 文件的 View 函数:

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

该 View 不仅将 csv 数据保存到 FileField,还将它返回给浏览器。我遇到的问题是浏览器文件运行良好,但保存在模型上的文件大小是原来的两倍,当我使用 diff 程序时,我可以看到额外的隐藏字符。我认为这一定与 mime 类型 vs django 自动保存 utf8 有关,但我就是想不通!

最佳答案

问题解决了!

ContentFile 是 cStringIO.StringIO 的子类 - 它处理 ASCII 编码文件。因此,字符串需要编码为 ASCII,因为默认情况下 django 中的所有内容都是 UTF8

cf = ContentFile(rendered.encode('ascii'))

关于Django FileField编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com