2017-10-10 47 views
0

我有意見的目錄,/views/api.py內的兩個文件,並/views/pages.pyDjango的從另一個觀點訪問JSONResponse文件

/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中的個別值,以便我可以創建一個列表或字典或爲每個視圖定製的內容?

+1

這是錯誤的方法。您不應直接從其他視圖調用視圖。如果您需要在您的主視圖中訪問與您的api視圖中相同的數據,則應該創建一個實用程序函數,該函數返回可以從兩個位置調用的字典。 –

+0

@DanielRoseman你能提供一個例子嗎? –

回答

0

出公共部分第一個因素(注:改寫使用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)