gpt4 book ai didi

python - django rest framework - 自定义渲染器

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:57 24 4
gpt4 key购买 nike

我正在尝试调整现有的 XMLRenderer 以创建一个自定义的 -

class CustomRenderer(renderers.BaseRenderer):
"""
Renderer which serializes to CustomXML.
"""

media_type = 'application/xml'
format = 'xml'
charset = 'utf-8'

def render(self, data, accepted_media_type=None, renderer_context=None):
"""
Renders *obj* into serialized XML.
"""
if data is None:
return ''

stream = StringIO()

xml = SimplerXMLGenerator(stream, self.charset)
xml.startDocument()
xml.startElement("job id='string1'", {})

self._to_xml(xml, data)

xml.endElement("job")
xml.endDocument()
return stream.getvalue()

def _to_xml(self, xml, data):
if isinstance(data, (list, tuple)):
for item in data:
xml.startElement("string2", {})
self._to_xml(xml, item)
xml.endElement("string2")

elif isinstance(data, dict):
for key, value in six.iteritems(data):
xml.startElement(key, {})
self._to_xml(xml, value)
xml.endElement(key)

elif data is None:
# Don't output any value
pass

else:
xml.characters(smart_text(data))

对于 string1,我希望它从调用它的 View 中获取值。 string1 = 来自 API 中 GET 的主键。

即。如果我调用 http://localhost/API/2345 然后 string1 = 2345

对于 string2,我希望它返回类似于他们在以下帖子中所做的模型名称 -

Adding root element to json response (django-rest-framework)

这是自定义渲染器返回的值,以便可以将 JSON/XML 的根值设置为模型名称。

我已经尝试调整 CustomRenderer 以包含这些行,但是当运行我的 View 时它提示我的 views.py 上的“object() 不带参数”-

if request.method == 'GET':
DEV = Trgjob.objects.using('database1').filter(job_id=pk).order_by('job_order')
serializer = CustomSerializer(DEV, many=True)
return CustomRenderer(serializer.data)

最佳答案

看起来您正试图从 View 中返回渲染器实例?您应该只从 View 返回常规数据,但使用 View 类的 renderer_classes 属性设置渲染器类。

class MyView(APIView):
renderer_classes = [CustomRenderer]

...

def get(self, request, pk=None):
DEV = Trgjob.objects.using('database1').filter(job_id=pk).order_by('job_order')
serializer = CustomSerializer(DEV, many=True)
return Response(serializer.data)

编辑:至于从 View 中获取额外的上下文到渲染器中......你可以通过检查 renderer_context['view'] 来做到这一点,所以这些render() 方法中的行...

view = renderer_context['view']
job_id = view.kwargs['job_id']

关于python - django rest framework - 自定义渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20851367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com