首页 > 解决方案 > Flask/Jinja2 渲染多个集合

问题描述

我正在使用 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 %}

标签: pythonflaskjinja2

解决方案


如果您的 html 文件看起来像这样,它将不会显示复制的语句。

{% extends "base.html" %}
{% block content %}

<div class="row row justify-content-center mt-4">
    

    <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>
             
                    <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>
            
                </div>


            </div>

        </div>

    </div>


</div>

{% endblock %}

在您的烧瓶视图中,将返回语句更改为此,

 return render_template("addcar.html", car=cars, spec=specs)

假设上面写的html是


推荐阅读