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

时间:2014-01-21 02:59:25

标签: 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作为变量传递给我的渲染器,它位于 -

之下

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'未定义。

2 个答案:

答案 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]