我不明白 Jinja2 模板扩展有什么问题
I can't understand what's my problem with Jinja2 template extension
我已经为 运行 编写了一些 HTML 和 Flask 代码,但它不适用于模板。它需要显示宇航员的采访结果。这些信息在可变数据中给出,它是带键的字典,指的是宇航员的名字、姓氏、性别和教育。
我的文件结构:文件“finder.py”和目录“templates”有两个模板——“auto_answer.html”和“base.html”。
finder.py:
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def main():
return "nothing"
@app.route("/answer")
@app.route("/auto_answer")
def answer():
data = {
"title": "Анкета",
"surname": "Anchikov",
"name": "Timothy",
"education": "среднее",
"profession": "экзобиолог",
"sex": "male",
"motivation": "Хочу стать одним из первых колонизаторов Марса!",
"ready": True
}
return render_template(["base.html", "auto_answer.html"], title=data["title"], data=data)
if __name__ == "__main__":
app.run(port=8080, host="127.0.0.1")
base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl"
crossorigin="anonymous">
<style>
h3 {
margin-left: 60px;
margin-top: 20px;
}
ul {
margin-left: 90px;
}
ol {
margin-left: 90px;
}
</style>
</head>
<body>
<h1>Миссия Колонизация Марса</h1>
<h4>И на Марсе будут яблони цвести!</h4>
<div id="main-block">
{% block content %}{% endblock %}
</div>
</body>
</html>
auto_answer.html:
{% extends 'base.html' %}
{% block content %}
<p>Фамилия: {{data["surname"]}}</p>
<p>Имя: {{data["name"]}}</p>
<p>Образование: {{data["education"]}}</p>
<p>Профессия: {{data["profession"]}}</p>
<p>Пол: {{data["sex"]}}</p>
<p>Мотивация: {{data["motivation"]}}</p>
<p>Готовы остаться на Марсе? {{data["ready"]}}</p>
{% endblock %}
怎么了?
在您的 render_template()
中,您正在传递两个 HTML 页。
为了 auto_answer.html
加载其基本元素,它通过 {% extends 'base.html' %}
(您已经拥有)来加载它,仅此而已。意思是,您不需要呈现两个 HTML 页面。
return render_template("auto_answer.html", title=data["title"], data=data)
我已经为 运行 编写了一些 HTML 和 Flask 代码,但它不适用于模板。它需要显示宇航员的采访结果。这些信息在可变数据中给出,它是带键的字典,指的是宇航员的名字、姓氏、性别和教育。
我的文件结构:文件“finder.py”和目录“templates”有两个模板——“auto_answer.html”和“base.html”。
finder.py:
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def main():
return "nothing"
@app.route("/answer")
@app.route("/auto_answer")
def answer():
data = {
"title": "Анкета",
"surname": "Anchikov",
"name": "Timothy",
"education": "среднее",
"profession": "экзобиолог",
"sex": "male",
"motivation": "Хочу стать одним из первых колонизаторов Марса!",
"ready": True
}
return render_template(["base.html", "auto_answer.html"], title=data["title"], data=data)
if __name__ == "__main__":
app.run(port=8080, host="127.0.0.1")
base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl"
crossorigin="anonymous">
<style>
h3 {
margin-left: 60px;
margin-top: 20px;
}
ul {
margin-left: 90px;
}
ol {
margin-left: 90px;
}
</style>
</head>
<body>
<h1>Миссия Колонизация Марса</h1>
<h4>И на Марсе будут яблони цвести!</h4>
<div id="main-block">
{% block content %}{% endblock %}
</div>
</body>
</html>
auto_answer.html:
{% extends 'base.html' %}
{% block content %}
<p>Фамилия: {{data["surname"]}}</p>
<p>Имя: {{data["name"]}}</p>
<p>Образование: {{data["education"]}}</p>
<p>Профессия: {{data["profession"]}}</p>
<p>Пол: {{data["sex"]}}</p>
<p>Мотивация: {{data["motivation"]}}</p>
<p>Готовы остаться на Марсе? {{data["ready"]}}</p>
{% endblock %}
怎么了?
在您的 render_template()
中,您正在传递两个 HTML 页。
为了 auto_answer.html
加载其基本元素,它通过 {% extends 'base.html' %}
(您已经拥有)来加载它,仅此而已。意思是,您不需要呈现两个 HTML 页面。
return render_template("auto_answer.html", title=data["title"], data=data)