有条件地从django django-rest-framework的视图返回json或html响应

时间:2014-10-12 20:25:24

标签: python json django rest django-rest-framework

如何从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 -

1 个答案:

答案 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)

仅供参考我以前遇到过这个错误,但并不是因为它配置正确 - 这是因为一些不相关的代码在它出错之前 - 所以寻找其他可能失败的代码。另请注意,您的“其他”是多余的。