【问题标题】:Django accessing a JSONResponse from another views fileDjango 从另一个视图文件访问 JSONResponse
【发布时间】:2017-10-10 13:13:03
【问题描述】:

我在视图目录中有两个文件,/views/api.py 和 /views/pages.py

/views/api.py 有返回 JSONResponses 对象的方法

例子:

@api_view(['GET'])
def foos(request):
    foos = get_list_or_404(Foo)
    data = [{'id': foo.id,
            'name': foo.name,
            'description': foo.description,
            'tag': foo.tag} for foo in foos]
    return JsonResponse({'foos': data})

/views/pages.py 将有一些方法可以访问 /views/api.py 中的一些方法,并将它们添加到上下文并呈现页面。

例子:

def home(request):
    foos = api.foos(request)
    print foos
    return HttpResponse(status=200)

在线打印堆栈上,我可以看到带有正确数据的 JSONResponse 对象。如何访问 foos 中的单个值,以便创建列表或字典或为每个视图自定义的内容?

【问题讨论】:

  • 这是错误的方法。您不应该直接从其他视图调用视图。如果您需要在主视图中访问与 api 视图中相同的数据,您应该创建一个实用函数,该函数返回一个可以从两个位置调用的 dict。
  • @DanielRoseman 你能举个例子吗?

标签: python json django api


【解决方案1】:

首先排除公共部分(nb:使用Queryset.values()重写以提高效率):

# somewhere.py
def get_foos():
    return list(Foo.objects.values('id', 'name', 'description', 'tag'))

然后从你的观点中调用它:

# views/api.py
from somewhere import get_foos

@api_view(['GET'])
def foos(request):
    data = get_foos()
    return JsonResponse({'foos': data})

# views/pages.py   
from somewhere import get_foos

def home(request):
    foos = get_foos()
    print foos
    return HttpResponse(status=200)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多