django - Django REST 框架和 XML。更改 item_tag_name、root_tag_name 等
问题描述
我根据快速入门在我的项目中设置了一个休息框架, 一切正常,但是,正如它通常发生的那样,并非没有问题!
我的serializer.py:
类 kvSerializer(serializers.HyperlinkedModelSerializer):
class Meta: model = kv fields = ['title', 'price', 'address']
我的意见.py:
类 kvViewSet(viewsets.ModelViewSet):
queryset = listings.objects.all() serializer_class = kvSerializer
我的XML:
对象标题 100 对象地址
问题:
如何更改标签
<root>
和<list-item>
?<root>
应该叫<feed>
<list-item>
应该叫<offer>
- 标签前
<offer>
需要插入标签<creation-date>
我的最终 XML 应如下所示:
<feed>
<creation-date>Date</creation-date>
<offer id=1>
<title>
Object title
</title>
<price>100</price>
<address>
object address
</address>
</offer>
<offer id=2>
<title>
Object title
</title>
<price>100</price>
<address>
object address
</address>
</offer>
</feed>
解决方案
这不是序列化器的一部分,而是渲染器的一部分。您可以在ModelViewSet
. 我们可以安装一个简单的渲染器:
pip install djangorestframework-xml
XmlRenderer
然后我们可以通过子类化并覆盖该_to_xml
方法来创建自定义渲染器:
from rest_framework_xml.renderers import XMLRenderer
class KvXMLRenderer(XMLRenderer):
root_tag_name = 'feed'
item_tag_name = 'offer'
creation_tag_name = 'creation-date'
def _to_xml(self, xml, data):
xml.startElement(self.creation_tag_name, {})
xml.characters('string-of-creation-date')
xml.endElement(self.creation_tag_name)
super()._to_xml(xml, data)
然后我们可以使用我们的自定义渲染renderer_classes
器ModelViewSet
:
class kvViewSet(viewsets.ModelViewSet):
queryset = listings.objects.all()
serializer_class = kvSerializer
renderer_classes = [KvXmlRenderer]
推荐阅读
- python - Visual Studio Code> Python > 黑色格式在保存时不运行
- ionic-framework - ionic 3获取当前位置无法在Android手机上运行
- ios - TVML App 中的叠加、搜索功能
- sql - 如何确定两列值之间的差异?
- eclipse - RCPTT:无效的 Eclipse 目标平台:无名称
- android - 如何将pdf文件转换为图像?
- ios - 登机牌(pk.pass 文件) - 如何修复切换时区后 iphone 提醒上的错误时间
- c# - 使用 Marshal.Copy 在额外线程中使用 arcore 复制从 android 相机获取的数据
- jenkins - Jenkins 多分支:如何向分支创建/删除添加功能?
- javascript - 多次提交多步模态