如何从django django-rest-framework的视图中有条件地返回json或html响应。
1) djangorestframework == 2.3.10
2)settings.py:
REST_FRAMEWORK = {
'PAGINATE_BY': 10,
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.TemplateHTMLRenderer',
'rest_framework.renderers.JSONRenderer',
)
}
3)在我的url.py中,我将其添加为最后一行 urlpatterns = format_suffix_patterns(urlpatterns,allowed = [' json',' html'])
4)我的观点有点像:
def myview(request, id, format='json'):
if format == 'json' or format is None:
return Response(my_dict, status=status.HTTP_200_OK)
else:
return Response(my_dict, template_name='myhtml.html')
如果我在url请求中明确使用.html或.json format_prefix,那么每件事都可行。但如果我没有指定任何格式,它会给我以下错误。我也尝试过: urlpatterns = format_suffix_patterns(urlpatterns,allowed = [' json',' html',' None']) 但它也不起作用。
在/ objects / 29处配置不当
返回模板响应,在视图或响应上未设置template_name
属性
请求方法:GET
请求URL:localhost:8000 / objects / 29
Django版本:1.7
异常类型:NotperlyConfigured
例外价值:
返回模板响应,在视图或响应上未设置template_name
属性
异常位置:D:\ WORKSPACE \ magg \ magg-workspace \ maggallan \ maggallan \ maggenv \ lib \ site -
答案 0 :(得分:4)
这对我有用:
class MyView(ListAPIView):
renderer_classes = (JSONRenderer, TemplateHTMLRenderer,)
def get(self, request, *args, **kwargs):
data = SomerSerializer([]).data
if request.accepted_renderer.format == 'html':
return Response(data, template_name='blah.html')
return Response(data)
仅供参考我以前遇到过这个错误,但并不是因为它配置正确 - 这是因为一些不相关的代码在它出错之前 - 所以寻找其他可能失败的代码。另请注意,您的“其他”是多余的。