我在DRF中设置了视图 -
views.py
class APIDetail(APIView):
def get(self, request, pk, format=None):
query = model.objects.get(id=pk)
....
我基本上想把那个pk作为变量传递给我的渲染器,它位于 -
之下renderers.py
def render(self, data, accepted_media_type=None, renderer_context=None):
if data is None:
return ''
stream = StringIO()
xml = SimplerXMLGenerator(stream, self.charset)
xml.startDocument()
xml.startElement("job id='string1' name='string2'",{})
我认为这会像在views.py中使我的类一样简单 -
class APIDetail(APIView):
def get(self, request, pk, format=None):
def jobid():
global pk
return pk
query = model.objects.get(id=pk)
....
然后以某种方式将该全局变量传递给renderers.py,但我不知道该怎么做。我猜是这样的,但它不起作用。
def render(self, data, accepted_media_type=None, renderer_context=None):
if data is None:
return ''
stream = StringIO()
xml = SimplerXMLGenerator(stream, self.charset)
xml.startDocument()
xml.startElement("job id='string1' name='string2'",{}) [jobid]
我不断得到的全局名称'jobid'未定义。
答案 0 :(得分:0)
围绕@ DanielRoseman的担忧,我决定以不同的方式解决这个问题。我正在改变视图直接传递到该行,此时我将弄清楚如何将整个数据传递给渲染器。这是变量全部在视图内部传递,只能通过自定义渲染器呈现。
答案 1 :(得分:-1)
您需要将jobid
变量声明为全局变量,因此global jobid
函数本身就是render
。我假设它在别处正确定义。
编辑以清除以下评论:
def render(self, data, accepted_media_type=None, renderer_context=None):
global jobid ###this is what you need to add
if data is None:
return ''
stream = StringIO()
xml = SimplerXMLGenerator(stream, self.charset)
xml.startDocument()
xml.startElement("job id='string1' name='string2'",{}) [jobid]