6

私は Flask を Web フレームワークとして使用しており、Mike Dewar著Getting Started with D3の最初の例を実装しようとしています。と という名前の Python スクリプトがあり、それぞれとservice_status.jsonを含むrun.py2 つのディレクトリがtemplates/あります。残念ながら、私のコードはデータをまったくレンダリングしておらず、明らかなエラーも生成していません。static/index.html

これは私が持っているものですrun.py:

#!/usr/bin/env python

from flask import Flask, render_template, url_for
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

if __name__=="__main__":
    port = 5000
    app.debug = True
    app.run( port=port )

これは私が持っているものですtemplates/index.html:

<!DOCTYPE HTML>
<HTML>

<HEAD>
  <META CHARSET="utf-8">
  <SCRIPT SRC="http://d3js.org/d3.v3.min.js"></SCRIPT>
  <SCRIPT>
    function draw(data) {
        "use strict";
        d3.select("body")
        .append("ul")
        .selectAll("li")
        .data(data)
        .enter()
        .append("li")
        .text( function(d){
            return d.name + ": " + d.status;
            }
        );
    }
  </SCRIPT>
  <TITLE>MTA Data</TITLE>
</HEAD>

<BODY>
  <H1>MTA Availability Data</H1>
  <SCRIPT>
    d3.json("{{ url_for( 'static', filename='service_status.json') }}",draw); // <---- BIG PROBLEM
  </SCRIPT>
</BODY>

</HTML>

Windows 7、Google Chrome、および Python 2.7 を使用しています。

4

3 に答える 3

6

JSON ファイルが変更されない場合は、それをstaticディレクトリに入れて使用する必要があります。

from flask import url_for
url_for('static', filename='service_status.json')

これを機能させるには、JavaScript のパスも次のように変更します。'/static/service_status.json'

于 2013-03-18T16:25:29.013 に答える
5

json ドキュメントのような静的ファイルは、デフォルトでテンプレートとは別のディレクトリから提供されます -デフォルトでは「静的」

ビューで url_for 呼び出しを使用する必要はありません。テンプレートで使用できます。

d3.json("{{ url_for('static', filename='service_status.json') }}",draw);

要約すると、1) json ドキュメントを static フォルダー (デフォルトでは、テンプレート フォルダーの横にある static というフォルダー) に移動し、2) テンプレートで url_for 呼び出しを使用して、json ドキュメントの正しい URI を取得します。

static 以外のフォルダーを使用する場合はstatic_folder、Flask オブジェクト コンストラクターに渡すことで変更できます。

于 2013-03-18T17:09:44.187 に答える
0

以前のコメントで述べたように、304 ステータス コードを取得しているようです。JSON には次の日付/時刻が含まれていることがわかります。

"Date": [
    "12/15/2011"
], 
"Time": [
    " 7:35AM"
], 

100%確実ではありませんが、これが役立つかもしれません:

http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#if-modified-since

基本的に、それは言う

「この要求ヘッダーは、条件付きにするために GET メソッドで使用されます。要求されたドキュメントがこのフィールドで指定された時間以降に変更されていない場合、ドキュメントは送信されず、代わりに Not Modified 304 応答が送信されます。このフィールドの形式は同じです。日付について:"

したがって、JSON のタイムスタンプを確認して、おそらく新しい保存を行うことができますか?

于 2013-03-18T18:24:14.450 に答える