2012-02-14 4 views
0

Google Chart APIにはかなり新しく、現在のdjangoプロジェクトに統合しようとしています。基本的には、アイブ氏は次のようになります。Djangoテンプレートを得た:Googleグラフ(テーブル)のdjango変数api

<div class="container_24"> 
<div class="grid_24"> 
    {% if query %} 
     <p>Results</p> 

     {% for result in page.object_list %} 
      <p> 
       <a href="{{ result.object.get_absolute_url }}">{{ result.object.name }} {{ result.object.salary }} {{ result.object.entry }} {{ result.object.category}}</a> 
      </p> 
     {% empty %} 
      <p>No results found.</p> 
     {% endfor %} 

     {% if page.has_previous or page.has_next %} 
      <div> 
       {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %} 
       | 
       {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %} 
      </div> 
     {% endif %} 
    {% else %} 
     {# Show some example queries to run, maybe query syntax, something else? #} 
    {% endif %} 
</div> 
<div class="fclear"></div> 
</div> 
<div class="clear"></div> 
</div> 
</div> 

すべてが正常で、予想通り、私は私の結果を見ることができます。次のように今、私はGoogleのチャートAPIを挿入します。

<div class="container_24"> 
<div class="grid_24"> 
{% if query %} 
    <p>Results</p> 

    {% for result in page.object_list %} 
<script type='text/javascript' src='https://www.google.com/jsapi'></script> 
<script type='text/javascript'> 
    google.load('visualization', '1', {packages:['table']}); 
    google.setOnLoadCallback(drawTable); 
    function drawTable() { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Name'); 
    data.addColumn('number', 'Salary'); 
    data.addColumn('boolean', 'Full Time Employee'); 
    data.addRows(4); 
    data.setCell(0, 0, '{{ result.object.name }}'); 
    data.setCell(0, 1, 10000, '$10,000'); 
    data.setCell(0, 2, true); 
    data.setCell(1, 0, '{{ result.object.name }}'); 
    data.setCell(1, 1, 8000, '$8,000'); 
    data.setCell(1, 2, false); 
    data.setCell(2, 0, '{{ result.object.name }}'); 
    data.setCell(2, 1, 12500, '$12,500'); 
    data.setCell(2, 2, true); 
    data.setCell(3, 0, '{{ result.object.name }}'); 
    data.setCell(3, 1, 7000, '$7,000'); 
    data.setCell(3, 2, true); 

    var table = new google.visualization.Table(document.getElementById('table_div')); 
    table.draw(data, {showRowNumber: true}); 
    } 
</script> 
.. 
.. 
.. 

しかし、私は上記の操作を行うとき、私は変数result.object.nameに同じ名前を参照してください。つまり、この配列をループしていません。

data.setCell(0:20,0)='{{result.object.name}}' 

ここで、0:20はテーブル/マトリックスの行を表しますか?

お時間をいただきありがとうございます。

答えて

1

私は正確に一つの選択肢は次のようにループされるだろう、あなたの問題を理解していれば:

{% for n in result.object.name %} 

    data.setCell({{ forloop.counter0 }}, 0, '{{ n }}'); 

{% endfor %} 

それはJS注射しがちなので、私は強くこれを行うことからあなたを落胆したいとあなたはJavascriptの両方をエスケープする必要があると思いますあなたのテンプレート。私がお勧めしたいことは、Googleのチャートラッパーを使用している: http://code.google.com/p/google-chartwrapper/

https://github.com/jacobian/django-googlecharts/

http://code.google.com/p/django-graphs/

限り私はジャンゴ・googlechartsを覚えているように非常にうまく機能し、あなたに直接タグを使用することができますあなたのテンプレート。

+0

djangoテンプレートタグがJSタイプの注入を受けやすいというのは残念です。これについて詳しく説明できますか?これはどこに書かれているか/議論されていますチャートタイプのツールへの他のリンクをありがとう。私は一見を持っています - 残念ですが、GoogleのグラフのAPIは実際にはかなりクールです。 – AJW

+0

申し訳ありません、多分私は完全にはっきりしていなかった:Djangoは問題ではありません。この問題は、ユーザーが入力したデータを信用することは絶対にできず、安全にエスケープされない限り、そのメソッドはかなり危険です。 – Nemoverflow

+0

こんにちはNemo ..このことに感謝します。私は「安全な」方法の1つを使用していますか?あなたのようなもの:{{your.variable | safe}}?これは単に十分ではないのでしょうか?どうもありがとう。 – AJW

関連する問題