Я считаю, что последняя версия рамки для отдыха 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
, поэтому он производит заголовок, который вам требуется.