2016-05-17 5 views
1

現在、私のDjangoアプリケーションのアーキテクチャに取り組んでいます。JSONを使用したDjangoテンプレートのレンダリングテーブル

ビュー: は最終的に、私の目標は、私はテンプレートにDjangoのビューから渡すJSONオブジェクトを解析することです

tasks_queryset = TaskResponsiblePeople.objects.select_related('task') 
tasks_json = serializers.serialize("json", tasks_queryset) 
return render_to_response('task_management/task_list.html', 
          {'task_form':task_form, 
          'responsible_people_form':responsible_people_form, 
          'tasks_json':tasks_json}, 
          context_instance=RequestContext(request)) 

テンプレート:今

<table stupid-attribute = {{tasks_json}}> 
</table> 

、私の質問されます、いくつかの関数が "stupid-attribute"を使わずにページのロードイベントでテーブルをレンダリングするように、パラメータをJavascriptに渡す方法はありますか?私は具体的に、誰もがそれを明確にすることができたJavaScriptテンプレートの一部

が何を意味するかを把握することはできません唯一の例外を除いて、私の質問に非常に関連しているtopicに出くわしました、場所を正確に私のコードで私は、以前の議論から

{% if tags %} 
    var tagbs = {{ tags|safe }}; 
    var tgs = JSON.parse(tagbs); 
    alert("done"); 
{% endif %} 

のアナログを使用する必要がありますし、私はこのような「汚い」HTMLを生成することなく、Pythonの構文を使用して、以下のコードを書き換えることができます:

for (var i = 0; i < data.length; i++) 
     { 
      tr = $('<tr style = "cursor:pointer"/>'); 
      tr.append('<td><input class = "tableRowChecker" type="checkbox"></td>'); 

      if (data[i].fields.status == 1) 
       tr.append("<td>" + 
          " <div onclick = 'change_task_status(" + data[i].pk + ')' " + 
           " class='glyphicon glyphicon-ok'></div></td>");   
      else 
       tr.append("<td>" + 
          "<div onclick = 'change_task_status(" + data[i].pk + " , false)' " + 
          " style = 'color:rgb(102,204,255)' class='glyphicon glyphicon-ok'></div></td>");     
      $('#task_table tbody').append(tr); 
     } 

答えて

1
私はあなたが実際にサポート属性 datastupid-attributeを交換する場合は、持っているものが悪いのか分からないが、あなたがそれを含めるなかった場合は別の場所であなただけの、実際のビットを追加する必要があります

Javascript。

<script type='text/javascript'> 
    ... JSON code here ... 
</script> 
+0

ここで重要な点は、スクリプトを外部ファイルにしたいということです。私が理解するように、テンプレートファイルにスクリプトを書くと、Djangoのコンテキスト変数をすぐに使用できるようになります。しかし、外部のスクリプトはどうですか? –

+0

あなたは何を言っているのか分かりません。 JSONをテンプレートのスクリプトスニペットに入れ、スクリプトの残りの部分を外部のJSファイルに入れることができます。 –

+0

しかし、私はJSでPython構文を使うことはできないようです(例えば、{%if tags%})。私はHTMLでしか使用できません。そして、その男はどのように警戒を使用していますか? –

1

代替アプローチは、JavaScriptが必要ですか?この権利を読んでいれば、構造化されたデータがあり、それをテーブルに入れたいと思っています。これはJSONオブジェクトの再構成を必要とするかもしれませんが、そうでなければ完全に可能です。このような何か:、テンプレートでこのような何か

[ 
    { 
    "task name": "first thing", 
    "id": 1, 
    "date": "01/01/2010" 
    }, 
    { 
    "task name": "second thing", 
    "id": 2, 
    "date": "02/02/2010" 
    }, 
    { 
    "task name": "third thing", 
    "id": 3, 
    "date": "03/03/2010" 
    }, 
    { 
    "task name": "fourth thing", 
    "id": 4, 
    "date": "04/04/2010" 
    } 
] 

<thead> 
    <tr> 
     <th>Task</th> 
     <th>ID</th> 
     <th>Date</th> 
    </tr> 
</thead> 
<tbody> 
{% for task in task_json %} 
    <tr> 
     <td>{{task.name}}</td> 
     <td>{{task.id}}</td> 
     <td>{{task.date}}</td> 
    </tr> 
{% endfor %} 
</tbody> 

は何かが足りないことでしたが、それはだように、この感じを

が見えるJSONオブジェクトのいくつかの並べ替えを渡します必要以上に複雑になっています。

+0

私はあなたのソリューションを試しました。私のjsonはこれとまったく同じように見えます(http://stackoverflow.com/questions/9592290/how-to-iterate-json-dictionary-in-django-template)。奇妙なことは、私のループが非常にゆっくりと動作し、20の代わりに行のhundresをレンダリングすることです。 –

+0

JSONオブジェクトの外観を投稿できますか?テンプレートの正確な構文は、JSONのフォーマットに依存します – cbrainerd

関連する問題