如何在 Flask 中 return render_template?
How to return render_template in Flask?
以下代码在 .py 文件中完美运行,但我想将 HTML 分开并将其放入 templates/index.html.
我想我必须使用 Flask 中的 render_template 函数才能 return 相同的结果。
# 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 html
我创建了一个文件夹模板和一个文件index.html。我使用了 return render_template('index.html') 但它不起作用。我必须向 return_template 函数添加哪些参数? “for Class in Thing.subclasses():”必须在 .html 文件或 .py 文件中? url_for 函数呢?
如果您可以编辑 .py 代码并让我知道我应该在 index.html 文件中准确地写什么以获得相同的结果,那就太好了。
更新:
我做了什么:
Python code
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')
Html code
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>{{ Class.name }}</h1>
</body>
</html>
您不能 return 一个函数多次。 returned 是函数的值。 This tutorial 在 JS 中,但它暗示了与 python 相同的概念。
如果您希望用户看到 html 上的内容列表,请执行此操作。 render_template('index.html', things=Thing.Subclasses())
这将为 Jinja 提供一个列表,然后它可以在其中进行循环。
对于 html 你可以这样做
{% for s in things %} {{ s }} is something {% endfor %}
。不过,s
可以为所欲为,s
是列表中的一个子类。
以下代码在 .py 文件中完美运行,但我想将 HTML 分开并将其放入 templates/index.html.
我想我必须使用 Flask 中的 render_template 函数才能 return 相同的结果。
# 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 html
我创建了一个文件夹模板和一个文件index.html。我使用了 return render_template('index.html') 但它不起作用。我必须向 return_template 函数添加哪些参数? “for Class in Thing.subclasses():”必须在 .html 文件或 .py 文件中? url_for 函数呢?
如果您可以编辑 .py 代码并让我知道我应该在 index.html 文件中准确地写什么以获得相同的结果,那就太好了。
更新:
我做了什么:
Python code
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')
Html code
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>{{ Class.name }}</h1>
</body>
</html>
您不能 return 一个函数多次。 returned 是函数的值。 This tutorial 在 JS 中,但它暗示了与 python 相同的概念。
如果您希望用户看到 html 上的内容列表,请执行此操作。 render_template('index.html', things=Thing.Subclasses())
这将为 Jinja 提供一个列表,然后它可以在其中进行循环。
对于 html 你可以这样做
{% for s in things %} {{ s }} is something {% endfor %}
。不过,s
可以为所欲为,s
是列表中的一个子类。