python—在文件之间调用变量的最佳方法?

python—在文件之间调用变量的最佳方法?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在DRF中有一个视图设置- views.py class APIDetail(APIView): def get(self, request, pk, format=None): query = model.objects.get(id=pk) .... 我基本上想把pk作为变量传递到我的渲染器中,如下所示- 渲染器 def render(self, data, accepted_media_type=None, renderer_context=None):

我在DRF中有一个视图设置-

views.py

class APIDetail(APIView):
    def get(self, request, pk, format=None):
        query = model.objects.get(id=pk)

....
我基本上想把pk作为变量传递到我的渲染器中,如下所示-

渲染器

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”没有定义。

您需要将
jobid
变量声明为全局变量,因此:
render
函数本身中的
global jobid
。我假设它在别处的定义是正确的

编辑以清除以下评论:

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]

根据@DanielRoseman的担忧,我决定以不同的方式处理这个问题。我正在修改视图以直接在该行中传递,在该点上,我将了解如何在之后将整个数据传递给渲染器。这是因为所有变量都在视图内部本地传递,只能通过自定义渲染器进行渲染。

您能否检查渲染器中的
数据
?渲染器可以很好地处理传递的数据,并且pk是有效的jobid。我只想将它作为一个变量单独传递,以调用我正在呈现的自定义xml中的另一个位置。这个问题非常不清楚。全局变量几乎总是一个坏主意,尤其是在Django项目这样的多用户环境中。但你到底想做什么?为什么不能简单地将ID传递给渲染器呢?好的,我在my views.py中将其作为全局函数调用,如上所述。我试图将渲染中的行更改为[global jobid],但现在该行出现“无效语法”的问题。不,您确实不想这样做。首先,
global
意味着在单个文件中,因此不能解决OP的问题;其次,你会遇到各种各样的线程安全问题。不要这样做。@DanielRoseman-那么还有什么选择呢?我已经有了将“数据”传递给渲染器的视图,我如何才能让它也传递“pk”?