我是django-piston的新手,每当我将数据获取/发布到xml时,xml的元素总是和< resource >
<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中对其进行更改?我只想将资源更改为product,如果可能的话,我还可以将id添加到xml元素中吗?
发布于 2011-12-02 15:53:36
您必须编写自己的XMLEmitter。这里有一个总是使用标记product而不是resource。
使其智能化需要更多的工作,因为模型在Emitter.construct()方法中被序列化为字典,并且不可能正确地扩展。如果知道_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')此外,你可能想看看PBS Education在https://github.com/pbs-education/django-piston上的django活塞叉。它允许您使用PistonViews以其他方式自定义输出。
发布于 2011-12-02 15:27:25
Elementtree会帮你的。您可以更改您想要更改的任何内容,读取文件,使用elementree对其进行解析,并更新值,然后再次将其放入文件(如果需要)。
https://stackoverflow.com/questions/8352350
复制相似问题