我希望能夠根據url參數以不同的方式顯示一組數據。導出不同格式的數據集
我的網址看起來像/ page/{limit}/{offset}/{format} /。
例如:
/page/20/0/xml/ - subset [0:20) in xml
/page/100/20/json/ - subset [20:100) in json
此外,我希望能夠做同樣的CSV,文本,EXCEL,PDF,HTML等..
我必須能夠設置不同格式的不同mimetypes和內容類型。 對於XML應該是application/xhtml + xml的,爲CSV - text/plain的,等...
在HTML模式我希望能夠將這些數據傳遞到一些模板(I」使用Django)。
我刨做一套的樣子:
dataset = {
"meta" : {"offset" : 15, "limit" : 10, "total" : 1000},
"columns" : {"name" : "Name", "status" : "Status", "creation_date" : "Creation Date"}
"items" :
[
{"name" : "John Smith", "status" : 1, "creation_date" : "2009-06-30 10:10:09"},
{"name" : "Joe The Plummer", "status" : 2, "creation_date" : "2009-06-30 10:10:09"}
]
};
,並有一個像這樣的輸出:
CSV輸出:
Name, Status, Creation Date
John Smith, 1, 2009-06-30 10:10:09
Joe The Plummer, 2, 2009-06-30 10:10:09
XML輸出:
<items>
<item id="1">
<name>John Smith</name>
<status>1</status>
<creation_date>2009-06-30 10:10:09</creation_date>
</item>
<item id="2">
<name>Joe The Plummer</name>
<status>2</status>
<creation_date>2009-06-30 10:10:09</creation_date>
</item>
</items>
所以我認爲有實施ented我自己的渲染器爲每種類型的 - 像XMLRenderer,RSSRenderer,JSONRenderer等..
if format == "xml":
context = XMLRenderer().render(data = dataset)
return HttpResponse(content, mimetype="application/xhtml+xml")
elif format == "json":
context = JSONRenderer().render(data = dataset)
return HttpResponse(content, mimetype="text/plain")
elif format == "rss":
context = RSSRenderer(title="Some long title here", link="/page/10/10/rss/").render(data = dataset)
return HttpResponse(content, mimetype="application/xhtml+xml")
# few more formats...
else:
return render_to_response(SOME_TEMPLATE, dataset)
它是正確的做法?
好主意有默認mimetype在Renderer類,謝謝。但我不確定在render()調用中返回它。我要在我的父Renderer類中有方法get_mimetype()。例如json_renderer = JSONRenderer(); content = json_renderer。渲染(數據=數據集);返回HttpResponse(內容,mimetype = json_renderer.get_mimetype())。我更喜歡這種方式,因爲將來可能會將數據呈現到文件或日誌或其他任何內容中,所以我不必瞭解mimetype作爲render()的第二個返回參數。謝謝。 – zinovii 2009-07-01 02:39:41