如果elif在视图中嵌套

时间:2014-06-29 19:39:33

标签: python django django-rest-framework

我有以下代码,即使我更改URL以指定格式,也始终返回HttpResponse -

http://myserver/cdxcomposites/?format=xml

我的观点出了什么问题?

@csrf_exempt
def cdxcomposites_list(request, format=None):
    """
    List all code, or create a new entry.
    """
    if request.method == 'GET':
        cdxcomposites = CDX_composites.objects.all()
        serializer = CDX_compositesSerializer(cdxcomposites, many=True)
        if format == 'csv':
            return CSVresponse(serializer.data)

        elif format == 'json':
            return JSONresponse(serializer.data)        

        elif format == 'xml':
            return XMLresponse(serializer.data)  

        elif format == 'yaml':
            return YAMLresponse(serializer.data)

        else:
            return HttpResponse(serializer.data)

我不包括POST,因为我还没到那么远。

编辑 - 如果我正在使用google-fu正确阅读,问题是我的if和所有elif语句都没有验证,所以我认为代码是正确的,我只是错过了如何将值放入视图中。这是我的urls.py

from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = patterns('rds.views',
    url(r'^cdxcomposites/$', 'cdxcomposites_list'),
    url(r'^cdxcomposites/(?P<pk>[0-9]+)/$', 'cdxcomposites_detail'),
)

urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'xml', 'yaml', 'csv'])

回复评论似乎格式没有解析。我把最后一行改为

return HttpResponse(format)

并提供None

2 个答案:

答案 0 :(得分:3)

查询参数永远不会通过视图的参数列表传递。这是在urls.py中提取的部分网址。

您需要在request.GET中查找网址中的查询参数:

format = request.GET.get("format", None)
if format == 'csv':
    return CSVresponse(serializer.data)
#etc...

答案 1 :(得分:1)

由于您使用的是format_suffix_patterns,因此您需要在网址后面传递格式类型为.xml

http://myserver/cdxcomposites/.xml

另一个选择是在发送请求时设置Accept标头。

相关文档:Adding optional format suffixes to our URLs