У меня есть настройка просмотра в 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" не определено.
Идя по вопросу @DanielRoseman, я решил подойти к этому по-другому. Я изменяю представление, чтобы передать в строке прямо, в какой момент я выясню, как передать все данные в renderer после. Это все переменные передавались локально внутри представления только для визуализации через собственный рендерер.
вам нужно объявить переменную 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]
data
в вашем рендерере?