2012-11-08 66 views
-2

我有一個顯示json文件數據的網頁。我想從該文件中獲取數據並將其傳遞給html頁面。現在,我只是試圖讓信息顯示出來,但我一直在收到錯誤。注意:似乎給我帶來麻煩的唯一行是「」「number = Number()」「」行。如果我把它拿出來,讓應用程序返回「你好世界」或類似的東西,它可以正常工作。這是我的代碼。將變量傳遞給Python中的HTML頁面

import os 
import json 
import urllib 
import ast 
from flask import Flask 
from flask import render_template 

app = Flask(__name__) 

class Number(object): 
    def __init__(self): 
     self.aquire = urllib.urlopen("http://www.prices.datanab.net/us/gasoline_json") 
     self.unpacked = self.aquire.read() 
     self.data = json.loads(self.unpacked) 

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

@app.route('/us/gasoline', endpoint='gasoline') 
def hello(): 
    number = Number() 
    return number.data 

@app.route('/us/gasoline_json', endpoint='gasoline_json') 
def index(): 
    return render_template('json/gasoline.json') 

if __name__ == '__main__': 
    # Bind to PORT if defined, otherwise default to 5000. 
    port = int(os.environ.get('PORT', 5000)) 
    app.run(host='0.0.0.0', port=port) 

,一旦我得到這部分的工作,我想

@app.route('/us/gasoline', endpoint='gasoline') 
def hello(): 
    number = Number() 
    return render_template('page.html',variable=number.data) 

更換

@app.route('/us/gasoline', endpoint='gasoline') 
def hello(): 
    number = Number() 
    return number.data 

,然後讓HTML文檔中的某些代碼中顯示的數據。

+4

「我不斷收到錯誤」不會告訴我們任何事情。 **有什麼錯誤?** – kindall

+0

即時通訊使用heroku,所以它的應用程序錯誤消息「在應用程序中發生錯誤,您的頁面無法提供服務,請稍後重試 如果您是應用程序所有者,檢查你的日誌中的細節。「 –

回答

1

在這一行

self.data = json.dumps(self.unpacked) 

你從其他的服務器下載的數據you'vet(它給你一個字符串),並轉儲到一個JSON字符串。所以,如果你已經下載了什麼是一樣的東西:

{"some": ["json", "object"]} 

你結了:

"{\"some\": [\"json\", \"object\"]}" 

這只是一個轉義字符串。你正在做你所需要的對照,你應該使用loads而不是dumps

編輯:
此外,您下載的網頁的輸出無效json,json使用雙引號定義字符串,而不是singel引號。

+0

如果我用這個代替'self.data = ast.literal_eval(self.unpacked)'這個代碼給了我一個字典作爲結果。我試圖使用json.loads,但在終端出現'ValueError:Expecting property name:line 2 column 1(char 2)'錯誤。在附註中,一旦我弄清楚如何將數據傳遞給html文件,我將如何在html中引用它?像一個特定的元素? –

+0

NVM。我有json.loads工作。原來該文件錯誤地在json文件中有單引號。 json.loads命令也給了我一個字典作爲輸出。 –