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

med*_*ean 6 python django rest json django-rest-framework

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

1) djangorestframework==2.3.10

2)设置.py:

REST_FRAMEWORK = {
'PAGINATE_BY': 10,
'DEFAULT_RENDERER_CLASSES': (
    'rest_framework.renderers.TemplateHTMLRenderer',
    'rest_framework.renderers.JSONRenderer',



 )
}
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

如果我在 url 请求中明确使用 .html 或 .json format_prefix ,一切正常。但是如果我没有指定任何格式,它会给我以下错误。我也试过: urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html', 'None']) 但它也不起作用。

ImproperlyConfigured at /objects/29 返回没有template_name在视图或响应上设置属性的模板响应请求方法:GET 请求 URL:localhost:8000/objects/29 Django 版本:1.7 异常类型:ImproperlyConfigured 异常值:
返回模板响应没有template_name在视图或响应上设置属性异常位置:D:\WORKSPACE\magg\magg-workspace\maggallan\maggallan\maggenv\lib\site-

myn*_*hno 5

这对我有用:

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)
Run Code Online (Sandbox Code Playgroud)

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