Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django rest框架-自定义渲染器_Python_Django_Django Rest Framework - Fatal编程技术网

Python django rest框架-自定义渲染器

Python django rest框架-自定义渲染器,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试调整现有的XMLRenderer以创建一个自定义的XMLRenderer- class CustomRenderer(renderers.BaseRenderer): """ Renderer which serializes to CustomXML. """ media_type = 'application/xml' format = 'xml' charset = 'utf-8' def render(self, da

我正在尝试调整现有的XMLRenderer以创建一个自定义的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,我希望它从调用它的视图中获取值。string1=API中GET的主键

例如,如果我正在呼叫
http://localhost/API/2345 然后string1=2345

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

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

我尝试调整CustomRenderer以包含线条,但在运行我的视图时,它会抱怨my 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)

看起来您正在尝试从视图返回渲染器实例? 您应该只从视图返回常规数据,但使用视图类上的
renderer\u 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)
编辑:至于从视图中获取渲染器中的额外上下文。。。您可以通过检查
renderer\u context['view']
来做到这一点,因此在
render()方法中可以使用以下内容

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

请更好地解释你的问题
string1=pk
什么是
pk
?请在这里描述第二个问题,而不是将我们指向另一个url..更新以更好地解释。我感到困惑的是,这里没有提到如何在中解析“string1”。我的序列化程序、渲染器和视图工作得很好。所发生的事情是,我想从视图中解析另一个变量以传递到渲染器中,这样当它调用“CustomRenderer”时,它也可以知道我要定义的string1=“xxxx”的string1=“xxxx”在我看来。@WhoiseEarth-更新了一些关于这方面的信息。我想我知道你从哪里来,我正在试图找出如何使它在我看来起作用。问题是django rest框架文档中的示例实际上没有显示使用此渲染器上下文的示例。在我复制和调整的自定义渲染器中,它具有渲染器上下文,我可以不使用它,或者因为它是单独的文件,所以需要在视图中直接使用它吗?