【发布时间】:2021-06-24 12:26:14
【问题描述】:
我正在使用 pymango、Flask 和 Jinja2 创建一个 MongoDB Web 应用程序。 与数据库连接时,我有三个集合,我可以在集合中插入新数据,但是当我使用 Jinja2 在 HTML 中渲染时,我基本上得到了两次具有相同数据的重复行。我是 python 和 Jinja 的新手。
enter code here
@app.route("/addcar", methods=["GET", "POST"])
def addcar():
if request.method == "POST":
cars = {
"car_image": request.form.get("car_image"),
"car_year": request.form.get("car_year"),
"car_name": request.form.get("car_name"),
"car_design": request.form.get("car_design"),
"car_driver1": request.form.get("car_driver1"),
"car_driver2": request.form.get("car_driver2")
}
specs = {
"spec_engine": request.form.get("spec_engine"),
"car_power": request.form.get("car_power"),
"trasmission": request.form.get("trasmission")
}
stats = {
"races": request.form.get("races"),
"wins": request.form.get("wins"),
"podiums": request.form.get("podiums"),
"poles": request.form.get("poles"),
"fast_laps": request.form.get("fast_laps"),
"constructor_champ": request.form.get("constructor_champ"),
"drivers_champ": request.form.get("drivers_champ"),
"description": request.form.get("description")
}
mongo.db.cars.insert_one(cars)
mongo.db.specs.insert_one(specs)
mongo.db.stats.insert_one(stats)
flash("Car Successfully Added")
return redirect(url_for("get_cars"))
return render_template("addcar.html")`
在此处输入代码
enter code here
{% extends "base.html" %}
{% block content %}
<div class="row row justify-content-center mt-4">
{% for car in cars %}
<div class="card mb-3" style="max-width: 840px;">
<div class="row g-0">
<div class="col-md-4">
<img src="{{ car.car_image }}" class="imgCard" alt="ferrari image">
</div>
<div class="col-md-8">
<div class="card-body">
<ul class="list-group list-group-flush">
<li class="list-group-item"><strong>Year</strong>: {{ car.car_year }}</li>
<li class="list-group-item"><strong>Name</strong>: {{ car.car_name }}</li>
<li class="list-group-item"><strong>Designer</strong>: {{ car.car_design }}</li>
</ul>
{% for spec in specs %}
<ul class="list-group list-group-flush">
<li class="list-group-item"><strong>Engine</strong>: {{ spec.spec_engine }}</li>
<li class="list-group-item"><strong>Power</strong>: {{ spec.car_power }}</li>
<li class="list-group-item"><strong>Trasmission</strong>: {{ spec.trasmission }}</li>
</ul>
{% endfor %}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
enter code here
{% endblock %}
【问题讨论】:
-
在您的 jinja 代码中,您已经在第二个列表中应用了 for 循环,因此您必然会有多个封装在其中的 html 副本。尽量不要将可迭代对象传递给 html,这样您就不必为它使用 for 循环。