2015-01-28 4 views
0

Я использую Django REST Framework, все работает красиво, но у меня есть одна проблема.Запись кодировки в xml

В результате-XML У меня есть строка:

<?xml version="1.0" ?> 

Но я действительно нужно изменить его на:

<?xml version="1.0" encoding="utf-8"?> 

Я не могу найти информацию о нем. Как это сделать?

Спасибо!

ответ

1

Я считаю, что последняя версия рамки для отдыха django автоматически обработает это. Когда я проверить его с помощью следующего кода я могу ясно видеть заголовок, который вы хотите:

from rest_framework.renderers import XMLRenderer 
renderer = XMLRenderer() 
print renderer.render('foo') 

>>> '<?xml version="1.0" encoding="utf-8"?>\n<root>foo</root>' 

Если вы не можете обновить зависимость, то вы можете следовать след ниже, для того, чтобы создать свой собственный Renderer подкласс, который добавит правильный заголовок. Все приведенные ниже примеры относятся к последней версии библиотеки, поэтому то, что вы найдете, может отличаться.

В основе django rest используется Renderers для записи содержимого. Они доступны в rest_framework/renderers.py. Это часть, которую вы хотите изменить:

xml = SimplerXMLGenerator(stream, self.charset) 
    xml.startDocument() 
    xml.startElement("root", {}) 

Случается, что он использует Джанго SimplerXMLGenerator, которая сама по себе основана на xml.sax.saxutils.XMLGenerator. Я обнаружил, что в моей системе со следующим кодом:

$ python -c 'import xml.sax.saxutils; print xml.sax.saxutils.__file__' 
/usr/lib/python2.7/xml/sax/saxutils.pyc 

Существует ассоциированный ру файл с этим. В этом файле можно найти XMLGenerator класс и включает в себя кодирование параметра Я:

def startDocument(self): 
    self._write('<?xml version="1.0" encoding="%s"?>\n' % 
        self._encoding) 

В последней версии Кодировка уже набор для utf-8, поэтому он производит заголовок, который вам требуется.