[英]Serve dynamically generated xml file to download in Django with character encoding information
我需要在Django
動態生成XML
文件才能下載。
我可以使用下面的代碼來執行此操作,但是沒有字符編碼信息:
import xml.etree.ElementTree as ET
def get_xml():
my_xml = ET.Element('foo', attrib={'bar': 'bla'})
my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False)
return my_str.decode('utf-8')
# my view
def download_xml_file(request):
response = HttpResponse(get_xml(), content_type="application/xml")
response['Content-Disposition'] = 'inline; filename=myfile.xml'
return response
我可以使用以下代碼添加字符編碼信息,但是首先要在服務器中寫入文件:
def get_xml():
my_xml = ET.Element('foo', attrib={'bar': 'bla'})
tree = ET.ElementTree(my_xml)
fname = 'myfile.xml'
tree.write(fname, xml_declaration=True, encoding='utf-8')
with open(fname, 'r') as fh:
my_str = fh.read()
return my_str
我如何在不先寫入服務器的情況下提供帶有字符編碼信息的xml文件下載?
我發現了兩種解決問題的方法:
1)將字符編碼信息連接為字符串(duh!):
def get_xml():
my_xml = ET.Element('foo', attrib={'bar': 'bla'})
my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False)
enc = '<?xml version="1.0" encoding="utf-8"?>'
return enc += my_str.decode('utf-8')
2)使用xml.dom.minidom.parseString
和xml.dom.minidom.Node.toxml
:
def get_xml():
my_xml = ET.Element('foo', attrib={'bar': 'bla'})
my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False)
return xml.dom.minidom.parseString(my_str).toxml(encoding='utf-8')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.