下面的代码可以很好地处理.py文件,但我希望将其分离并放入templates/index.html中。
我想我必须使用Flask中的render_template函数才能返回相同的结果。
# 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函数添加哪些参数?对于Thing.subclasses()中的类:“必须在.html文件还是.py文件中?那么url_for函数呢?
如果您可以编辑.py代码,并让我知道我应该在index.html文件中确切地写些什么,以获得相同的结果,那就太好了。
更新:
我所做的:
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>
发布于 2021-07-18 21:56:52
你不能多次返回一个函数。无论返回什么,都是函数的值。This tutorial在JS中,但它隐含着与python相同的概念。
如果您希望用户看到html上的内容列表,请执行以下操作。这将给Jinja一个列表,然后它可以render_template('index.html', things=Thing.Subclasses())
循环。
对于html,您可以执行此{% for s in things %} {{ s }} is something {% endfor %}
操作。但是,s
是列表中的一个子类,您可以对s
执行任何操作。
https://stackoverflow.com/questions/68429566
复制相似问题