| @ -0,0 +1,24 @@ | |||
| from flask import Flask, request,url_for,render_template,abort | |||
| from lxml import etree | |||
| import os | |||
| app = Flask(__name__) | |||
| @app.route('/',methods=["GET","POST"]) | |||
| def inicio(): | |||
| doc=etree.parse("sevilla.xml") | |||
| municipios=doc.findall("municipio") | |||
| return render_template("inicio.html",municipios=municipios) | |||
| @app.route('/<code>') | |||
| def temperatura(code): | |||
| try: | |||
| doc=etree.parse("http://www.aemet.es/xml/municipios/localidad_"+code+".xml") | |||
| except: | |||
| abort(404) | |||
| name=doc.find("nombre").text | |||
| max=doc.find("prediccion/dia/temperatura").find("maxima").text | |||
| min=doc.find("prediccion/dia/temperatura").find("minima").text | |||
| return render_template("temperaturas.html",name=name,max=max,min=min) | |||
| if __name__ == '__main__': | |||
| app.run() | |||
| @ -0,0 +1,7 @@ | |||
| click==6.7 | |||
| Flask==0.12.2 | |||
| itsdangerous==0.24 | |||
| Jinja2==2.9.6 | |||
| lxml==4.0.0 | |||
| MarkupSafe==1.0 | |||
| Werkzeug==0.12.2 | |||
| @ -0,0 +1,106 @@ | |||
| <provincia id="Sevilla"> | |||
| <municipio value="alanis-id41002">Alanís</municipio> | |||
| <municipio value="albaida-del-aljarafe-id41003">Albaida del Aljarafe</municipio> | |||
| <municipio value="alcala-de-guadaira-id41004">Alcalá de Guadaíra</municipio> | |||
| <municipio value="alcala-del-rio-id41005">Alcalá del Río</municipio> | |||
| <municipio value="alcolea-del-rio-id41006">Alcolea del Río</municipio> | |||
| <municipio value="algaba-la-id41007">Algaba, La</municipio> | |||
| <municipio value="algamitas-id41008">Algámitas</municipio> | |||
| <municipio value="almaden-de-la-plata-id41009">Almadén de la Plata</municipio> | |||
| <municipio value="almensilla-id41010">Almensilla</municipio> | |||
| <municipio value="arahal-id41011">Arahal</municipio> | |||
| <municipio value="aznalcazar-id41012">Aznalcázar</municipio> | |||
| <municipio value="aznalcollar-id41013">Aznalcóllar</municipio> | |||
| <municipio value="badolatosa-id41014">Badolatosa</municipio> | |||
| <municipio value="benacazon-id41015">Benacazón</municipio> | |||
| <municipio value="bollullos-de-la-mitacion-id41016">Bollullos de la Mitación</municipio> | |||
| <municipio value="bormujos-id41017">Bormujos</municipio> | |||
| <municipio value="brenes-id41018">Brenes</municipio> | |||
| <municipio value="burguillos-id41019">Burguillos</municipio> | |||
| <municipio value="cabezas-de-san-juan-las-id41020">Cabezas de San Juan, Las</municipio> | |||
| <municipio value="camas-id41021">Camas</municipio> | |||
| <municipio value="campana-la-id41022">Campana, La</municipio> | |||
| <municipio value="cantillana-id41023">Cantillana</municipio> | |||
| <municipio value="canada-rosal-id41901">Cañada Rosal</municipio> | |||
| <municipio value="carmona-id41024">Carmona</municipio> | |||
| <municipio value="carrion-de-los-cespedes-id41025">Carrión de los Céspedes</municipio> | |||
| <municipio value="casariche-id41026">Casariche</municipio> | |||
| <municipio value="castilblanco-de-los-arroyos-id41027">Castilblanco de los Arroyos</municipio> | |||
| <municipio value="castilleja-de-guzman-id41028">Castilleja de Guzmán</municipio> | |||
| <municipio value="castilleja-de-la-cuesta-id41029">Castilleja de la Cuesta</municipio> | |||
| <municipio value="castilleja-del-campo-id41030">Castilleja del Campo</municipio> | |||
| <municipio value="castillo-de-las-guardas-el-id41031">Castillo de las Guardas, El</municipio> | |||
| <municipio value="cazalla-de-la-sierra-id41032">Cazalla de la Sierra</municipio> | |||
| <municipio value="constantina-id41033">Constantina</municipio> | |||
| <municipio value="coria-del-rio-id41034">Coria del Río</municipio> | |||
| <municipio value="coripe-id41035">Coripe</municipio> | |||
| <municipio value="coronil-el-id41036">Coronil, El</municipio> | |||
| <municipio value="corrales-los-id41037">Corrales, Los</municipio> | |||
| <municipio value="cuervo-de-sevilla-el-cuervo-el-id41903">Cuervo de Sevilla, El</municipio> | |||
| <municipio value="dos-hermanas-id41038">Dos Hermanas</municipio> | |||
| <municipio value="ecija-id41039">Écija</municipio> | |||
| <municipio value="espartinas-id41040">Espartinas</municipio> | |||
| <municipio value="estepa-id41041">Estepa</municipio> | |||
| <municipio value="fuentes-de-andalucia-id41042">Fuentes de Andalucía</municipio> | |||
| <municipio value="garrobo-el-id41043">Garrobo, El</municipio> | |||
| <municipio value="gelves-id41044">Gelves</municipio> | |||
| <municipio value="gerena-id41045">Gerena</municipio> | |||
| <municipio value="gilena-id41046">Gilena</municipio> | |||
| <municipio value="gines-id41047">Gines</municipio> | |||
| <municipio value="guadalcanal-id41048">Guadalcanal</municipio> | |||
| <municipio value="guillena-id41049">Guillena</municipio> | |||
| <municipio value="herrera-id41050">Herrera</municipio> | |||
| <municipio value="huevar-del-aljarafe-id41051">Huévar del Aljarafe</municipio> | |||
| <municipio value="isla-mayor-id41902">Isla Mayor</municipio> | |||
| <municipio value="lantejuela-la-id41052">Lantejuela, La</municipio> | |||
| <municipio value="lebrija-id41053">Lebrija</municipio> | |||
| <municipio value="lora-de-estepa-id41054">Lora de Estepa</municipio> | |||
| <municipio value="lora-del-rio-id41055">Lora del Río</municipio> | |||
| <municipio value="luisiana-la-id41056">Luisiana, La</municipio> | |||
| <municipio value="madrono-el-id41057">Madroño, El</municipio> | |||
| <municipio value="mairena-del-alcor-id41058">Mairena del Alcor</municipio> | |||
| <municipio value="mairena-del-aljarafe-id41059">Mairena del Aljarafe</municipio> | |||
| <municipio value="marchena-id41060">Marchena</municipio> | |||
| <municipio value="marinaleda-id41061">Marinaleda</municipio> | |||
| <municipio value="martin-de-la-jara-id41062">Martín de la Jara</municipio> | |||
| <municipio value="molares-los-id41063">Molares, Los</municipio> | |||
| <municipio value="montellano-id41064">Montellano</municipio> | |||
| <municipio value="moron-de-la-frontera-id41065">Morón de la Frontera</municipio> | |||
| <municipio value="navas-de-la-concepcion-las-id41066">Navas de la Concepción, Las</municipio> | |||
| <municipio value="olivares-id41067">Olivares</municipio> | |||
| <municipio value="osuna-id41068">Osuna</municipio> | |||
| <municipio value="palacios-y-villafranca-los-id41069">Palacios y Villafranca, Los</municipio> | |||
| <municipio value="palomares-del-rio-id41070">Palomares del Río</municipio> | |||
| <municipio value="paradas-id41071">Paradas</municipio> | |||
| <municipio value="pedrera-id41072">Pedrera</municipio> | |||
| <municipio value="pedroso-el-id41073">Pedroso, El</municipio> | |||
| <municipio value="penaflor-id41074">Peñaflor</municipio> | |||
| <municipio value="pilas-id41075">Pilas</municipio> | |||
| <municipio value="pruna-id41076">Pruna</municipio> | |||
| <municipio value="puebla-de-cazalla-la-id41077">Puebla de Cazalla, La</municipio> | |||
| <municipio value="puebla-de-los-infantes-la-id41078">Puebla de los Infantes, La</municipio> | |||
| <municipio value="puebla-del-rio-la-id41079">Puebla del Río, La</municipio> | |||
| <municipio value="real-de-la-jara-el-id41080">Real de la Jara, El</municipio> | |||
| <municipio value="rinconada-la-id41081">Rinconada, La</municipio> | |||
| <municipio value="roda-de-andalucia-la-id41082">Roda de Andalucía, La</municipio> | |||
| <municipio value="ronquillo-el-id41083">Ronquillo, El</municipio> | |||
| <municipio value="rubio-el-id41084">Rubio, El</municipio> | |||
| <municipio value="salteras-id41085">Salteras</municipio> | |||
| <municipio value="san-juan-de-aznalfarache-id41086">San Juan de Aznalfarache</municipio> | |||
| <municipio value="sanlucar-la-mayor-id41087">Sanlúcar la Mayor</municipio> | |||
| <municipio value="san-nicolas-del-puerto-id41088">San Nicolás del Puerto</municipio> | |||
| <municipio value="santiponce-id41089">Santiponce</municipio> | |||
| <municipio value="saucejo-el-id41090">Saucejo, El</municipio> | |||
| <municipio value="sevilla-id41091">Sevilla</municipio> | |||
| <municipio value="tocina-id41092">Tocina</municipio> | |||
| <municipio value="tomares-id41093">Tomares</municipio> | |||
| <municipio value="umbrete-id41094">Umbrete</municipio> | |||
| <municipio value="utrera-id41095">Utrera</municipio> | |||
| <municipio value="valencina-de-la-concepcion-id41096">Valencina de la Concepción</municipio> | |||
| <municipio value="villamanrique-de-la-condesa-id41097">Villamanrique de la Condesa</municipio> | |||
| <municipio value="villanueva-del-ariscal-id41098">Villanueva del Ariscal</municipio> | |||
| <municipio value="villanueva-del-rio-y-minas-id41099">Villanueva del Río y Minas</municipio> | |||
| <municipio value="villanueva-de-san-juan-id41100">Villanueva de San Juan</municipio> | |||
| <municipio value="villaverde-del-rio-id41101">Villaverde del Río</municipio> | |||
| <municipio value="viso-del-alcor-el-id41102">Viso del Alcor, El</municipio> | |||
| </provincia> | |||
| @ -0,0 +1,277 @@ | |||
| * | |||
| { margin: 0; | |||
| padding: 0;} | |||
| body | |||
| { font-family: 'trebuchet ms', arial, sans-serif; | |||
| padding: 0px; | |||
| margin: 0px; | |||
| font-size: .80em; | |||
| background: #E9E4C7 url(pattern.png); | |||
| color: #555;} | |||
| p | |||
| { margin: 0px; | |||
| padding: 0px 0px 16px 0px; | |||
| line-height: 1.7em;} | |||
| h1, h2, h3, h4, h5, h6 | |||
| { color: #362C20; | |||
| padding: 0 0 5px 0;} | |||
| h1, h4 | |||
| { font: normal 175% "century gothic", arial; | |||
| margin: 0 0 15px 0; | |||
| padding: 15px 20px 5px 0; | |||
| color: #444;} | |||
| h2, h5 | |||
| { padding: 0 0 5px 0; | |||
| font: normal 110% arial; | |||
| text-transform: uppercase; | |||
| letter-spacing: 0;} | |||
| h3, h6 | |||
| { color: #888; | |||
| font: normal 95% arial; | |||
| letter-spacing: 0; | |||
| padding: 0 0 15px 0;} | |||
| h4 | |||
| { color: #362C20;} | |||
| h5, h6 | |||
| { color: #129991;} | |||
| img | |||
| { border: 0px; | |||
| margin: 0px; | |||
| padding: 0px;} | |||
| .left | |||
| { float: left; | |||
| border-right: 20px solid #FFF;} | |||
| .right | |||
| { float: right; | |||
| border-left: 20px solid #FFF;} | |||
| .center | |||
| { display: block; | |||
| text-align: center; | |||
| margin: 0 auto;} | |||
| blockquote | |||
| { margin: 20px 0px 20px 0px; | |||
| padding: 10px 20px 0px 20px; | |||
| border: 1px solid #E5E5DB; | |||
| background: #F5F5F1;} | |||
| ul | |||
| { margin: 2px 0px 18px 16px; | |||
| padding: 0px;} | |||
| ul li | |||
| { list-style-type: square; | |||
| margin: 0px 0px 6px 0px; | |||
| padding: 0px;} | |||
| ol | |||
| { margin: 8px 0px 0px 24px; | |||
| padding: 0px;} | |||
| ol li | |||
| { margin: 0px 0px 11px 0px; | |||
| padding: 0px;} | |||
| a, a:hover | |||
| { outline: none; | |||
| border-bottom: 1px dotted; | |||
| text-decoration: none; | |||
| color: #444;} | |||
| a:hover | |||
| { border-bottom: 1px solid;} | |||
| #logo, #menubar, #panel, #site_content, #footer | |||
| { margin-left: auto; | |||
| margin-right: auto;} | |||
| #header | |||
| { background: url(back.png) repeat-x;} | |||
| #logo | |||
| { width: 870px; | |||
| position: relative; | |||
| height: 107px;} | |||
| #logo #logo_text | |||
| { position: absolute; | |||
| top: 15px; | |||
| left: 0;} | |||
| #logo h1 | |||
| { font: normal 300% "century gothic", arial, sans-serif; | |||
| border-bottom: 0; | |||
| text-transform: none; | |||
| padding: 12px 0 0 26px; | |||
| color: #FFF; | |||
| margin: 0;} | |||
| #menubar | |||
| { width: 879px; | |||
| height: 45px; | |||
| padding-left: 5px;} | |||
| ul#menu{float: right;margin: 0px;} | |||
| ul#menu li | |||
| { float: left; | |||
| margin: 7px 0 0 0; | |||
| padding: 0 0 0 6px; | |||
| list-style: none;} | |||
| ul#menu li a | |||
| { font-size: 110%; | |||
| display: block; | |||
| float: left; | |||
| height: 25px; | |||
| border-bottom: 0; | |||
| text-decoration: none; | |||
| padding: 8px 32px 5px 26px; | |||
| text-align: center; | |||
| color: #FFF; | |||
| text-transform: uppercase;} | |||
| ul#menu li.tab_selected a | |||
| { height: 25px; | |||
| padding: 8px 32px 5px 26px;} | |||
| ul#menu li.tab_selected | |||
| { margin: 7px 0 0 0; | |||
| background: transparent url(tabs.png) no-repeat 0 0px;} | |||
| ul#menu li.tab_selected a, ul#menu li.tab_selected a:hover | |||
| { background: url(tabs.png) no-repeat 100% 0px; | |||
| color: #000;} | |||
| ul#menu li a:hover | |||
| { color: #27C0FF;} | |||
| #panel | |||
| { width: 792px; | |||
| height: 154px; | |||
| border: 15px solid #F3F2EF;} | |||
| #site_content | |||
| { width: 875px; | |||
| background: #FFF; | |||
| overflow: hidden; padding-top: 20px;} | |||
| .sidebar | |||
| { float: right; | |||
| width: 178px; | |||
| padding: 20px 25px 15px 15px;} | |||
| .sidebar ul | |||
| { width: 178px; | |||
| padding-top: 4px; | |||
| margin: 4px 0px 30px 0px;} | |||
| .sidebar li | |||
| { list-style: none; | |||
| padding: 0px 0px 4px 0px;} | |||
| .sidebar li a, .sidebar li a:hover | |||
| { text-decoration: none; | |||
| padding: 0px 0px 0px 18px; | |||
| display: block; | |||
| background: transparent url(arrow.png) no-repeat left center; | |||
| color: #555; | |||
| border: none;} | |||
| .sidebar li a.selected, .sidebar li a:hover, .sidebar li a.selected:hover | |||
| { background: transparent url(arrow_select.png) no-repeat left center;} | |||
| #content | |||
| { text-align: left; | |||
| width: 597px; | |||
| padding: 20px 10px 15px 26px;} | |||
| #footer | |||
| { width: 780px; | |||
| height: 33px; | |||
| padding: 20px 20px 4px 20px; | |||
| margin-bottom: 20px; | |||
| text-align: center; | |||
| background: transparent; | |||
| color: #444; | |||
| text-transform: uppercase;} | |||
| .alternate_colour | |||
| { color: #27C0FF;} | |||
| .form_settings | |||
| { margin: 15px 0 0 0;} | |||
| .form_settings p | |||
| { padding: 0 0 4px 0;} | |||
| .form_settings span | |||
| { float: left; | |||
| width: 200px; | |||
| text-align: left;} | |||
| .form_settings input, .form_settings textarea | |||
| { padding: 4px; | |||
| width: 299px; | |||
| font: 100% arial; | |||
| border: 1px solid #E5E5DB; | |||
| background: #FFF; | |||
| color: #47433F;} | |||
| .form_settings .submit | |||
| { font: 100% arial; | |||
| border: 1px solid; | |||
| width: 99px; | |||
| margin: 0 0 0 210px; | |||
| height: 36px; | |||
| padding: 2px 0 3px 0; | |||
| cursor: pointer; | |||
| background: #3B3B3B; | |||
| color: #FFF;} | |||
| .form_settings textarea, .form_settings select | |||
| { font: 100% arial; | |||
| width: 299px;} | |||
| .form_settings select | |||
| { width: 304px;} | |||
| .form_settings .checkbox | |||
| { margin: 4px 0; | |||
| padding: 0; | |||
| width: 14px; | |||
| border: 0; | |||
| background: none;} | |||
| .separator | |||
| { width: 100%; | |||
| height: 0; | |||
| border-top: 1px solid #D9D5CF; | |||
| border-bottom: 1px solid #FFF; | |||
| margin: 0 0 20px 0;} | |||
| table | |||
| { margin: 10px 0 30px 0;} | |||
| table tr th, table tr td | |||
| { text-align: left; | |||
| background: #3B3B3B; | |||
| color: #FFF; | |||
| padding: 7px 4px;} | |||
| table tr td | |||
| { background: #CCCCCC; | |||
| color: #47433F; | |||
| border-top: 1px solid #FFF;} | |||
| @ -0,0 +1,45 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | |||
| <head> | |||
| <title>{% block title %}{% endblock %}</title> | |||
| <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> | |||
| <link rel="stylesheet" type="text/css" href="{{url_for("static", filename='css/style.css')}}"> | |||
| </head> | |||
| <body> | |||
| <div id="main"> | |||
| <div id="header"> | |||
| <div id="logo"> | |||
| <h1>Curso de <span class="alternate_colour">Flask</span></h1> | |||
| </div> | |||
| <div id="menubar"> | |||
| <ul id="menu"> | |||
| <!-- put class="tab_selected" in the li tag for the selected page - to highlight which page you're on --> | |||
| <li class="tab_selected"><a href="/">Home</a></li> | |||
| <li><a href="#">Flask</a></li> | |||
| <li><a href="#">OpenWebeninars</a></li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| <div id="site_content"> | |||
| <div id="panel"><img src="{{url_for("static", filename='css/panel.png')}}" alt="tree tops" /></div> | |||
| <div class="sidebar"> | |||
| <!-- insert your sidebar items here --> | |||
| <h1>Blogroll</h1> | |||
| <ul> | |||
| <li><a href="#">Flask</a></li> | |||
| <li><a href="#">Python3</a></li> | |||
| <li><a href="#">OpenWeninars</a></li> | |||
| </ul> | |||
| </div> | |||
| <div id="content"> | |||
| {% block content %}{% endblock %} | |||
| </div> | |||
| </div> | |||
| <div id="footer">Copyright © Company Name. All Rights Reserved. | <a href="http://validator.w3.org/check?uri=referer">XHTML</a> | <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a> | <a href="http://www.dcarter.co.uk">design by dcarter</a></div> | |||
| </div> | |||
| <div style="text-align: center; font-size: 0.75em;">Diseño descargado desde <a href="http://www.misplantillas.com/">plantillas web gratis</a>.</div></body> | |||
| </html> | |||
| @ -0,0 +1,9 @@ | |||
| {% extends "base.html" %} | |||
| {% block title %}Temperaturas{% endblock %} | |||
| {% block content %} | |||
| <ul> | |||
| {% for m in municipios:%} | |||
| <li><a href="/{{m.attrib["value"][-5:]}}">{{m.text}}</a></li> | |||
| {% endfor%} | |||
| </ul> | |||
| {% endblock %} | |||
| @ -0,0 +1,5 @@ | |||
| {% extends "base.html" %} | |||
| {% block title %}{{titulo}}{% endblock %} | |||
| {% block content %} | |||
| <h1>{{resultado}}<h1> | |||
| {% endblock %} | |||
| @ -0,0 +1,8 @@ | |||
| {% extends "base.html" %} | |||
| {% block title %}Temperaturas{% endblock %} | |||
| {% block content %} | |||
| <h1>Temperaturas en {{name}}</h1> | |||
| <p>Temperatura máxima:<strong>{{max}}ºC</strong></p> | |||
| <p>temperatura mínima:<strong>{{min}}ºC</strong></p> | |||
| <a href="..">Volver</a> | |||
| {% endblock %} | |||