我有以下代码,即使我更改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
。
答案 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
标头。