2015-08-30 53 views
2

我無法在django中獲取基於功能的視圖的JSON。我有下面的代碼。我基本上想要該函數根據用戶請求返回json或html頁面。基於功能的視圖的Django Rest框架

@api_view(['GET']) 
@renderer_classes((JSONRenderer,TemplateHTMLRenderer,BrowsableAPIRenderer)) 
def meld_live_orders(request): 
    if request.method =='GET': 
     current_orders = Meld_Sales.objects.values_list('TicketNo',flat=True).distinct() 
     prev_orders = Meld_Order.objects.values_list('TicketNo',flat =True).distinct() 

     live_orders = live_order_generator(current_orders,prev_orders) 

     return render(request,'live_orders.html',{'live_orders':live_orders}) 

當我去到URL - http://localhost:8000/live-orders.json

我得到它規定了以下錯誤 - meld_live_orders() got an unexpected keyword argument 'format'

這是因爲我需要包括串行類的地方以同樣的方式CBVS? @API_VIEW是否序列化響應?

我試着在函數參數中包含format = ''。但問題是,當我想要呈現json時,它仍然呈現html。

回答

4

您需要對代碼進行一些更改。

首先,如果您尚未定義,則需要在您的url中使用format_suffix_patterns。這將允許我們在URL上使用文件擴展名,從而爲給定的媒體類型提供端點。其次,我們可以通過以下方式來解決這個問題:其一,您的視圖在定義中沒有format參數。

使用format_suffix_patterns,你必須確保在 'format'關鍵字參數添加到相應的視圖。

@api_view(['GET']) 
@renderer_classes((JSONRenderer,TemplateHTMLRenderer,BrowsableAPIRenderer)) 
def meld_live_orders(request, format=None): # add a 'format' parameter 
    ... 

第三,你需要返回一個DRF響應,而不是一個Django響應您在視圖的結束返回。

0

您必須匹配url模式中的format參數,但在視圖函數中沒有名爲format的參數。將視圖定義更改爲:

def meld_live_orders(request, format = ""): 
+0

我實際上已經嘗試過..對不起,跳過它的問題..它仍然呈現在HTML中,當我想要它呈現一個JSON – Kannaj

+0

請你介紹你的網址模式? – hsfzxjy

+0

嗯,我知道,在最後一行中,您已經呈現了一個HTML頁面作爲響應,它應該是一個rest_framework.response.Response對象。 – hsfzxjy