[英]python: turn nested dict into JSON-like format
我有以下形式的嵌套字典:
dict = {
"BLOCK_NAME": {
"SUB_BLOCK_NAME1": {
"ENTRY_NUMBER1": {
"FIELD_NAME" : "VALUE"
"FIELD_NAME2" : "VALUE2"
"FIELD_NAME3" : "VALUE3"
}
}
}
}
我想使用jquery樹表插件(w2ui)在HTML頁面中顯示它。 插件將從數據初始化,格式如下:
{ recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }},
{ recid: 2, key_1: 'Stuart', key_2: 'Motzart',
w2ui: {
children: [
{ recid: 21, key_1: 'Stuart', key_2: 'Motzart',w2ui: { children: [] } },
{ recid: 22, key_1: 'Jin', key_2: 'Franson',
w2ui: {
children: [
依此類推...我將Jinja2用作模板引擎,並且正在考慮完成此任務的最佳方法。
我能想到的選擇是:
編寫一個python函數,將dict轉換為與該插件的格式匹配的長字符串,然后將其傳遞給Jinja。
在遍歷模板並創建JS格式時,將所有邏輯放入模板中。
將字典另存為JSON並在JS中處理(不太可取,我的JS較弱)
你怎么看?
編輯:以下@ mpf82答案,我嘗試了以下操作:
HTML:
<script type="text/javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
url : 'get_json',
show: {
toolbar: true,
},
multiSearch: false,
searches: [
{ field: 'lname', caption: 'Last Name', type: 'text' },
{ field: 'fname', caption: 'First Name', type: 'text' },
{ field: 'email', caption: 'Email', type: 'text' },
{ field: 'sdate', caption: 'Start Date', type: 'date' }
],
columns: [
{ field: 'lname', caption: 'Last Name', size: '30%' },
{ field: 'fname', caption: 'First Name', size: '30%' },
{ field: 'email', caption: 'Email', size: '40%' },
{ field: 'sdate', caption: 'Start Date', size: '90px' }
]
});
w2utils.settings['dataType'] = 'JSON'
});
</script>
Cherrypy:
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def get_json(self):
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, fname: 'John', lname: 'doe', email: 'jdoe@gmail.com', sdate: '4/3/2012', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data
我從Cherrypy收到錯誤415:不支持的媒體類型期望內容類型為application / json,text / javascript的實體
無需通過jinja傳遞數據或創建長字符串。
相反,請使用w2ui網格的url屬性,將w2utils設置為使用JSON( w2utils.settings.dataType = 'JSON';
),如果您使用的是Cherrypy,您要做的就是在URL上使用JSON裝飾器:
@cherrypy.expose
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def my_url():
try:
# optionally get the w2ui request
requested_data = cherrypy.request.json
except:
pass
# build your w2ui data dict
my_data = { recid: 1, key_1: 'John', key_2: 'doe', w2ui: { children: [] }}
# return dict, no further conversion neccessary
return my_data
您可以簡單地將字典轉儲為類似JSON的字符串:
import json
# You may need some converting: dict = convert_to_jq_format(dict)
result = json.dumps(dict)
並將結果傳遞給Jinja的模板。
當然,如果您的字典與插件的格式不匹配,則應首先將其轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.