【问题标题】:How to return render_template in Flask?如何在 Flask 中返回 render_template?
【发布时间】:2021-09-26 11:19:54
【问题描述】:

以下代码在 .py 文件中完美运行,但我想分离 HTML 并将其放入 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 文件中准确地写什么以获得相同的结果,那就太好了。

更新:

我做了什么:

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>

【问题讨论】:

  • “但它不起作用。”请给出正确的错误描述,包括完整的回溯。
  • I created a folder templates and a file index.html. I used return render_template('index.html') but it doesn't work. 如果不共享不起作用的实际代码 - 即模板的内容和您用来呈现它的代码 - 任何人都很难指出您的内容做错了!
  • @KlausD。 from flask import Flask, render_template from owlready2 import * from flask import Flask, url_for on = get_ontology("app.owl").load() app = Flask(name) @app.route("/ ") def ontology_page(): for Class in Thing.subclasses(): return render_template('index.html') 这是正确的py代码吗?
  • @RobinZigmond - 我在帖子中放了 2 张带有代码的图片。
  • 请将所有信息作为文本添加到问题本身,不要截图代码。

标签: python flask rendering owlready


【解决方案1】:

您不能多次返回一个函数。无论返回什么,都是函数的值。 This tutorial 在 JS 中,但它暗示的概念与 python 相同。

如果您希望用户查看 html 上的内容列表,请执行此操作。 render_template('index.html', things=Thing.Subclasses()) 这将为 Jinja 提供一个列表,然后它可以在其中进行 for 循环。

对于 html,你可以这样做 {% for s in things %} {{ s }} is something {% endfor %}。用s 做任何你想做的事,s 是列表中的一个子类。

【讨论】:

  • 感谢 Ajitesh - 它部分工作,它返回类名。我还需要返回页面 IRI 和每个类也是一个链接。在初始代码(.py 文件)中,它是 " html += """

    %s

    """ % (url_for("class_page" , iri = Class.iri), Class.name)”。我该如何添加这个呢? url_for 函数呢?我还需要用吗?
  • 您应该将 url_for 函数放在 index.html 中。也许在你的 index.html 中写一些类似&lt;a href="{{ url_for("class_page", iri = Class.iri) }}"&gt;{{ Class.name }}&lt;/a&gt; 的东西。 flask.palletsprojects.com/en/2.0.x/tutorial/templates
猜你喜欢
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2017-12-03
  • 2020-04-16
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多