我在django中获取基于函数的视图的JSON时遇到问题。我有以下代码。我基本上希望函数根据用户请求返回json或html页面。
@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})
当我转到网址时 - http://localhost:8000/live-orders.json
我收到的错误说明了以下内容 - meld_live_orders() got an unexpected keyword argument 'format'
这是因为我需要在CBV中以相同的方式包含序列化器类吗? @API_VIEW
序列化响应不是吗?
我尝试在函数参数中包含format = ''
。但问题是,当我想要渲染json时,它仍会呈现html。
答案 0 :(得分:4)
您需要对代码进行一些更改。
首先,如果您尚未定义,则需要在网址中使用format_suffix_patterns
。这将允许我们在URL上使用文件扩展名,从而为给定的媒体类型提供端点。
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
...
]
urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html']) # allow us to use '.json' and '.html' at the end of the 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响应,你将在视图的末尾返回。
答案 1 :(得分:0)
您必须在网址格式中匹配format
参数,但在视图函数中没有名为format
的参数。将视图定义更改为:
def meld_live_orders(request, format = ""):