1

次の形式のネストされた辞書があります。

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 を使用しており、このタスクを達成するための最良の方法は何かを考えています。

私が考えることができるオプションは次のとおりです。

  • dict をそのプラグインの形式に一致する長い文字列に変換する Python 関数を作成し、それを Jinja に渡します。

  • すべてのロジックをテンプレート内に配置し、繰り返し処理して JS フォーマットを作成します。

  • dict を 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.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 が発生します: unsupported media type Expected an entity of content type application/json, text/javascript

4

2 に答える 2