2016-05-27 12 views
1

何らかの形でスタックオーバーフローのような質問ではないことは知っていますが、私にこれを禁止しないでください。私は本当にこれに関するベストプラクティスのアドバイスが必要です。DjangoのHTMLテンプレート - ページのどこかにJSONオブジェクトを保存する

私はHTMLテンプレート上にテーブルをレンダリングするDjangoビューを持っています。 私の目標は、クライアント側でユーザー入力データを検証することです。検証の一部は、テーブルにレンダリングされていないデータを考慮した複雑なデータ分析と関係しています。フィルタ条件に応じてテーブルを非表示にするフィルタがあり、フィルタが空でない場合、すべてのテーブル行の解析に基づいてデータの検証が正しく行われないため、ユーザー定義の属性を使用できません。

更新:このため、私はDjangoビューのJSONオブジェクトをHTMLテンプレートに渡します。しかし、問題は、私はそれを外部のJSファイルに渡すことができないということです。

たとえば、次のように編集可能な表があるとします。

<tbody json_failed_attempt = {{json_object}}> 
    {% for vendor in vendors_table %} 
    <tr> 
     <td class = 'click_this_row'> 
      {{vendor.legal_entity.name}} 
     </td> 
    </tr> 
    {% endfor %} 
</tbody> 

jQueryの

$('td.click_this_row').on('change', function() 
    { 
     // HOW SHOULD I PARSE THROUGH THE JSON ??? 
     // This alert outputs this: 
     // "[{"model":" 
     alert ($('#vendorsTable tbody').attr('legal_entities_json')) 
    } 

Djangoのビュー:

def vendors(request): 

    vendors_table = Vendors.objects.all() 
    legal_entities_queryset = LegalEntities.objects.all() 
    legal_entities_json = serializers.serialize('json', legal_entities_queryset, fields=('inn', 'kpp')) 

    return render_to_response('vendors/vendors_list.html', 
          {'vendors_table':vendors_table, 
           'legal_entities_json' : legal_entities_json}, 
           context_instance=RequestContext(request)) 

は、この方法は可能ですか?もしそうなら、ここでparseJSONを使用できないのはなぜですか?ループはどのように見えますか?

答えて

2

ちょうどあなたのJavaScriptでJSON.parseを使用します。

JSON.parse($('#vendorsTable tbody').attr('legal_entities_json')) 

別のアプローチは、(JSONは有効なJavaScriptオブジェクトであるため)javascriptの変数を作成し、それにJSONオブジェクトを割り当てることです。あなたのテンプレートで:

<script> 
var data = {{ json_object }}; 
</script> 

変数を外部のJSファイルで使用してください。

+1

@EdgarNavasardyan外部JSスクリプトを組み込む前に 'data'変数を設定しますか? 'data'を' window'オブジェクト属性として設定しようとすることもできます: 'window.my_data = {{json_object}};' – dizballanze

+0

ありがとう、両方のメソッドが今動作します。気にする唯一の質問は、ユーザーがページソースを表示するとデータを見ることができるということです。それは、ある意味では大事な問題を構成していませんか? –

+0

@EdgarNavasardyan私はそれが安全上の問題ではないと思います。 Djangoはこの種の問題からのデフォルトの保護を持っています。 https://docs.djangoproject.com/es/1.9/topics/security/#cross-site-scripting-xss-protection – dizballanze

関連する問題