2011-11-28 5 views
0

Django가있는 주식 웹 사이트를 만들고 싶습니다. 차트를 만들 수있는 자바 스크립트 라이브러리 (tickp)를 찾았지만 자바 스크립트를 모르거나 장고 템플릿에서 json 데이터를 읽는 법을 모르겠습니다. 나는 this code을 사용하여 Yahoo Finance에서 주식 데이터를 검색한다.Javascript로 장고에서 주식형 차트를 만드는 방법?

from stock.stockretriever import StockRetriever 

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

그러나 나는 템플릿을 작성하는 방법을 모른다, 누군가가 말해 줄 수 :

는이 같은이 평와의 .js 내 폴더, 내 의견을 넣어?

감사합니다.

답변

1

당신은 두 가지 옵션이 있습니다

  1. 데이터는 1. 갈 경우에 당신이 뭔가를 추가 할 수

  • 동적으로 서버에서 데이터를 가져 포함하여 템플릿을 렌더링 당신의 템플릿 :

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

    이 템플릿에는 템플릿을 생성하는 자바 스크립트 코드도 포함되어 있습니다. 데이터에서 플롯합니다. 뷰 기능은 데이터 페치를 포함하고 그래서 같은 컨텍스트 객체를 반환 :

    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 갈 경우 동적으로 아약스 요청을 사용하여 JSON 데이터를로드 할 수 jQuery.ajax 같은 것을 사용해야합니다. 이 요청은 사용자의 뷰를 호출합니다. jQuery.ajax 호출에서 요청이 JSON을 반환하도록 지정하면 자동으로 데이터가 Javascript에 대한 객체로 사용 가능하게됩니다. jQuery.ajax 성공 처리기에서 데이터를 플롯 기능에 전달합니다.

  • +0

    당신의 도움에 감사드립니다, 나는 그것의 문서를 이해할 수 없다, 나는 HTML 템플릿으로 작성하는 방법을 모르겠다. – sword

    +0

    나는 html 템플릿에 다음과 같이 씁니다.

     {{hisdata}}
    아무것도하지만, 일이 플롯 = window.tickp ("# 차트") plot.read (데이터) plot.plot(). – sword

    +0

    jro가 제안한 템플릿을 살펴보십시오. 시체 명령을 호출 할 때 body onload를 사용하십시오. 또한 데이터가 {{hisdata}}라고 쓰여진 곳에 표시되는지 여부를 렌더링 된 페이지의 소스에서 확인하십시오. 템플릿 변수에 json_plot_data를 사용하고 있으므로 템플릿 코드를 {{json_plot_data}}로 변경해야합니다. – Bernhard

    1

    라이브러리가 설치되어 있지 않지만 tickp 라이브러리의 readme을 기반으로하면 다음 데이터가 필요합니다. [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) }) 
    

    , 당신은 당신의 템플릿에 다음과 같은 라인을 따라 뭔가가 필요 :

    <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 호출 또는 적절한 형식 및 사용법과 관련하여 일부 모서리를 잘라 냈지만 시작하기 전에 뭔가를 제공해야합니다. 누락 된 것이 있으면 특정 문제로 질문을 업데이트하십시오.

    +0

    감사합니다. jro, 제게 말했을 때 데이터의 형식을 봅니다. 스톡 해 리어 백에서 반환 된 데이터가 사전이고 틱프가 목록이 필요하다는 것을 알았습니다. 따라서 json을 사용할 수 없습니다. 형식? 그리고 다른 질문은, new_data = [d [: - 1] d 데이터에 대한] django에서 전달할 수 없습니다. – sword

    +0

    당신은 dict 형식을 언급하지 않았지만 데이터를 예상 형식과 일치하도록 변환해야합니다. 간단한 예를 들면, 당신의 dict이'd '{'date ':'2011-11-28 ','open ': 5.1, ...}'이라면 이것을 [d ['date '], d [ 'open'], ...]'. 희망이 있으면 도움이 될 것입니다 : 사전의 구조를 게시하십시오. – jro

    +0

    고마워, 나는 이미 장고에있는 데이터를 읽었지만 아무것도 html 템플릿에 표시되지 않는다. – sword

    관련 문제