Как сделать биржевую диаграмму в Django с помощью Javascript? - PullRequest
0 голосов
/ 28 ноября 2011

Я хочу создать стандартный веб-сайт с помощью Django, и я нашел библиотеку Javascript ( tickp ) для создания диаграмм, но я не знаю Javascript и не знаю, как читать данные json вшаблон DjangoЯ использую этот код для извлечения биржевых данных из Yahoo Finance.

Я помещаю эти .py и .js в свою папку, и мои представления выглядят так:

from stock.stockretriever import StockRetriever

def stockretriever(request,number):
    data = StockRetriever().get_historical_info('YHOO')
    return HttpResponse(simplejson.dumps(data),mimetype='application/json')

Но я не знаю, как мне написать шаблон, может кто-нибудь сказать мне?

спасибо.

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

У вас есть два варианта:

  1. визуализация шаблона с данными
  2. динамически получать данные с сервера

Если вы выберете 1. Вы можете добавить что-то вроде этого в свой шаблон:

<script type="text/javascript">
   var my_data = {{ json_plot_data }};
</script>

Шаблон включает также код JavaScript, который генерирует графики на основе данных. Функция представления будет включать выборку данных и возвращать объект контекста следующим образом:

def my_stock_plot_view(request, number):
    # get stock data
    json_data = simplejson.dumps(data)
    django.shortcuts.render(request, 'template.html', {'json_plot_data':json_data})

Если вы выберете вариант 2. вам потребуется использовать что-то вроде jQuery.ajax для динамической загрузки данных json с помощью запроса ajax. Этот запрос будет вызывать ваше представление, в вызове jQuery.ajax вы указываете, что запрос возвращает JSON, который автоматически делает данные доступными как объект для Javascript. В обработчике успеха jQuery.ajax вы передадите данные в функцию plot.

1 голос
/ 28 ноября 2011

У меня не установлены эти библиотеки, но на основе readme библиотеки tickp вам понадобятся следующие данные: [date, open, high, low, close and optionally volume]. Функция get_historical_info возвращает столбцы [Date, Open, High, Low, Close, Volume, AdjClose]. Несовпадение здесь - AdjClose, поэтому вам нужно убрать это из данных, которые вы получаете из StockRetriever:

from django.shortcuts import render
from stock.stockretriever import StockRetriever

def stockretriever(request, number):
    data = StockRetriever().get_historical_info('YHOO')
    # Assuming data is returned as a list of lists
    new_data = [d[:-1] for d in data]
    return render(request, 'stock.html', { 'data': simplejson.dumps(new_data) })

Следуя инструкциям readme, вам нужно что-то вроде следующего в вашем шаблоне:

<html>
<head><script src="tickp.js"></script><script src="stats.js"></script></head>
<body onload='plot = window.tickp("#chart"); plot.read({{ data }}); plot.plot();'>
  <div id="chart"></div>
</body>
</html>

Обратите внимание, что я сократил некоторые углы относительно возможных вызовов Ajax или правильного форматирования и использования, но это должно дать вам кое-что для начала. Если вы что-то упустили, обновите ваш вопрос, указав конкретные проблемы, которые у вас есть.

...