2016-12-08 1 views
1

J'essaie d'afficher quelques données de prévisions météorologiques de 3 jours simples en utilisant pythonanywhere flask app. Voici mon code à ce jour:Affichage des données du dictionnaire en utilisant flask, pythonanywhere

from flask import Flask, render_template 
import requests 
from collections import defaultdict 


app = Flask(__name__) 

r = requests.get("http://api.wunderground.com/api/mykey/forecast/q/SouthAFrica/Stellenbosch.json") 
data = r.json() 
weather_data = defaultdict(list) 

counter = 0 
for day in data['forecast']['simpleforecast']['forecastday']: 
    date= day['date']['weekday'] + ":" 
    cond= "Conditions: ", day['conditions'] 
    temp= "High: ", day['high']['celsius'] + "C", "Low: ", day['low']['celsius'] + "C" 


    counter = counter + 1 

    weather_data[counter].append(date) 
    weather_data[counter].append(cond) 
    weather_data[counter].append(temp) 

return weather_data 

@app.route('/') 
def home(): 
    return render_template('home.html', weather_data=weather_data) 

if __name__ == '__main__': 
    app.run(host="0.0.0.0", port=5000) 

et simple 'home.html' ici:

<table> 
{% for key,value in weather_data.items() %} 
    <tr> 
     <td>{{value[1]}}</td> 
     <td>{{value[2]}}</td> 
     <td>{{value[3]}}</td> 
     <td>{{value[4]}}</td> 
    </tr> 
{% endfor %} 
</table> 

Je ne peux pas sembler obtenir ce travail. Je soupçonne que c'est quelque chose à voir avec le format des données? Devrait-il plutôt s'agir d'un fichier distinct importé?

+0

Vous ne dites pas quel est le problème, mais je soupçonne que cela a quelque chose à voir avec le retour ballant au milieu de nulle part. – polku

Répondre

1

Mettez la logique de Python dans votre fonction de vue, comme ceci:

@app.route('/') 
def home(): 
    r = requests.get("http://api.wunderground.com/api/key/forecast/q/SouthAfrica/Stellenbosch.json") 
    data = r.json() 
    weather_data = defaultdict(list) 

    counter = 0 
    for day in data['forecast']['simpleforecast']['forecastday']: 
     date = day['date']['weekday'] + ":" 
     cond = "Conditions: ", day['conditions'] 
     temp = "High: ", day['high']['celsius'] + "C", "Low: ", day['low']['celsius'] + "C" 

     counter += 1 

     weather_data[counter].append(date) 
     weather_data[counter].append(cond) 
     weather_data[counter].append(temp) 

    return render_template('home.html', weather_data=weather_data) 

En regardant les données de l'API, je pense que votre {{ value[1] }} est encore un tuple de sorte que vous pourriez avoir besoin quelque chose comme {{ value[1][0] }}, {{ value[1][1] }} dans votre modèle pour rendre ce Les données.

Ajoutez des instructions d'impression à votre python pour déboguer comment analyser la structure de données.