Python - лучший способ вызвать переменную между файлами?

-1

У меня есть настройка просмотра в 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
    Вы можете проверить data в вашем рендерере?
  • 0
    рендерер отлично работает с передаваемыми данными, а pk является допустимым идентификатором задания. Я просто хочу передать его отдельно как переменную для вызова в другом месте в пользовательском XML-коде, который я рендерил.
Показать ещё 1 комментарий
Теги:
django-rest-framework

2 ответа

0

Идя по вопросу @DanielRoseman, я решил подойти к этому по-другому. Я изменяю представление, чтобы передать в строке прямо, в какой момент я выясню, как передать все данные в renderer после. Это все переменные передавались локально внутри представления только для визуализации через собственный рендерер.

-2

вам нужно объявить переменную 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]
  • 0
    Хорошо, я назвал это в моем views.py как глобальная функция, как указано выше. Я попытался изменить строку в рендере на [global jobid], и теперь он жалуется на «неверный синтаксис» в этой строке.
  • 0
    отредактировал мой ответ, чтобы сделать его более понятным
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню