我是django-piston的新手,每当我将数据发送到xml时,xml的元素总是 和<资源>
<response>
<resource>
<resource>4</resource>
<resource>0</resource>
<resource>2011-11-30</resource>
</resource>
<resource>
<resource>4</resource>
<resource>4</resource>
<resource>2011-12-01</resource>
</resource>
<resource>
<resource>4</resource>
<resource>0</resource>
<resource>2011-12-02</resource>
</resource>
<resource>
<resource>4</resource>
<resource>0</resource>
<resource>2011-12-03</resource>
</resource>
<resource>
<resource>4</resource>
<resource>0</resource>
<resource>2011-12-04</resource>
</resource>
</response>
有没有办法在handlers.py中更改它? 我只是想将资源转化为产品,如果可能的话,我还可以为xml元素添加一个id吗?
答案 0 :(得分:2)
您必须编写自己的XMLEmitter。这是一个始终使用标记product
而不是resource
。
使其智能化需要更多的工作,因为模型在Emitter.construct()
方法中被序列化为dicts,并且无法正确扩展。很高兴知道_to_xml()
方法中的原始模型类,并根据类名命名元素。
from piston.emitters import Emitter, XMLEmitter
class ProductXMLEmitter(XMLEmitter):
def _to_xml(self, xml, data):
if isinstance(data, (list, tuple)):
for item in data:
attrs = {}
# if item contains id value, use it as an attribute instead
if isinstance(item, dict):
attrs["id"] = unicode(item.pop("id"))
xml.startElement("product", attrs)
self._to_xml(xml, item)
xml.endElement("product")
else:
super(BetterXMLEmitter, self)._to_xml(xml, data)
# replace default XMLEmitter with ours
Emitter.register('xml', ProductXMLEmitter, 'text/xml; charset=utf-8')
另外,您可能希望在https://github.com/pbs-education/django-piston查看PBS Education的django-piston前叉。它允许您使用PistonViews以其他方式自定义输出。
答案 1 :(得分:0)
Elementtree会帮助你。您可以更改要更改的内容,读取文件,使用elementree解析它并更新值并再次将其放入文件(如果需要)。