El siguiente código funciona perfectamente desde el archivo .py pero quiero separar el HTML y ponerlo en templates/index.html.
Supongo que tengo que usar la función render_template en Flask para poder devolver los mismos resultados.
# File dynamic_website.py from owlready2 import * onto = get_ontology("bacteria.owl").load() from flask import Flask, url_for app = Flask(__name__) @app.route('/') def ontology_page(): html = """<html><body>""" html += """<h2>'%s' ontology</h2>""" % onto.base_iri html += """<h3>Root classes</h3>""" for Class in Thing.subclasses(): html += """<p><a href="%s">%s</a></p>""" % (url_for("class_page", iri = Class.iri), Class.name) html += """</body></html>""" return htmlCreé una plantilla de carpeta y un archivo index.html. Usé return render_template('index.html') pero no funciona. ¿Qué argumentos tengo que agregar a la función return_template? "for Class in Thing.subclasses():" tiene que estar en el archivo .html o en el archivo .py? ¿Qué pasa con la función url_for?
Si pudiera editar el código .py y decirme qué debo escribir exactamente en el archivo index.html para obtener los mismos resultados, sería genial.
ACTUALIZAR:
Que he hecho:
from flask import Flask, render_template from owlready2 import * from flask import Flask, url_for onto = get_ontology("bacteria.owl").load() app = Flask(__name__) @app.route("/") def ontology_page(): for Class in Thing.subclasses(): return render_template('index.html') <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <h1>{{ Class.name }}</h1> </body> </html>No puede devolver una función varias veces. Lo que se devuelve, es el valor de la función. Este tutorial está en JS, pero implica el mismo concepto que Python.
Si desea que el usuario vea una lista de cosas en el html, haga esto. render_template('index.html', things=Thing.Subclasses()) Esto le dará a Jinja una lista, donde luego puede for loop.
Para html puedes hacer esto {% for s in things %} {{ s }} is something {% endfor %} . Sin embargo, haga lo que quiera con s , s es una subclase de la lista.