【问题标题】:How to display results of SQLalchemy query correctly in Flask Jinja templates如何在 Flask Jinja 模板中正确显示 SQLalchemy 查询的结果
【发布时间】:2018-11-21 14:11:15
【问题描述】:

我无法在 Jinja 模板页面中正确显示 SQLAlchemy 查询的结果。

我的项目基于一级方程式车手和他们所效力的车队。我有一个页面列出了 F1 中的团队,它应该列出为每个团队比赛的车手(车手和团队类之间的多对多关系)。

我收到的输出是正确的,但它似乎在列表类型输出中组合在一起。我希望每个团队的驱动程序以字符串的形式独立列出,而不是组合在一起的列表。

这是我的代码:

models.py

from datetime import datetime
from app import db


class Team_driver(db.Model):
    # Many-to-many relationship table between Driver and Team
    __tablename__ = "team_driver"
    id = db.Column(db.Integer, primary_key=True)
    team_id = db.Column(db.Integer, db.ForeignKey('team.id'), nullable=False)
    driver_id = db.Column(db.Integer, db.ForeignKey('driver.id'), nullable=False)


class Team(db.Model):
    __tablename__ = "team"
    id = db.Column(db.Integer, primary_key=True)
    teamName = db.Column(db.String(64))
    nationality = db.Column(db.String(64))
    # relationship between Team table and Driver table, reference 'team' in forms
    drivers = db.relationship('Driver', secondary="team_driver", backref='team')

    def __repr__(self):
        # specify variables to return to web page from backref
        return '{}'.format(self.teamName)


class Driver(db.Model):
    __tablename__ = "driver"
    id = db.Column(db.Integer, primary_key=True)
    firstName = db.Column(db.String(64))
    lastName = db.Column(db.String(64))
    raceNum = db.Column(db.Integer)
    nationality = db.Column(db.String(64))
    # relationship between Driver table and Team table, reference 'driver' in forms
    teams = db.relationship('Team', secondary="team_driver", backref='driver')

    def __repr__(self):
        # specify variables to return to web page from backref
        return '{} {}'.format(self.firstName,self.lastName)

routes.py(仅针对特定路由)

@app.route('/teamDetails', methods=['GET', 'POST'])
def teamDetails():
    details = Team.query.all()
    return render_template('teamDetails.html',  title='Team Details', details=details)

driverDetails.html

<!-- teamDetails.html -->

<!-- all other html files must now extend index.html and not base.html -->
{% extends "index.html" %}

{% block content %}
    <h1>Team Details</h1>
    {% for d in details %}
    <div><p>Team Name: {{ d.teamName }}<br>Nationality: {{ d.nationality }}
    <br>Drivers: {{ d.driver }}</p></div>
    {% endfor %}
{% endblock %}

这是我从网页得到的输出

screenshot of webpage output

我想要的是显示相关驱动程序的页面,但单独显示,没有 [] 括号。

谁能帮忙解决我哪里出错了?

非常感谢。

【问题讨论】:

  • 我认为 Team.driver(每个 backref)是一种多关系,因此它呈现为带有 [] 的数组。您可以使用连接删除括号([]),例如。 ','.join(driver) 。另外,我认为您应该将“详细信息”重命名为“团队”。

标签: python flask jinja2 flask-sqlalchemy


【解决方案1】:

由于d.driver 是驱动程序列表,您应该单独打印列表中的每一项,因为如果您打印某项列表,它还会包含括号。

{% block content %}
<h1>Team Details</h1>
{% for d in details %}
  <div><p>Team Name: {{ d.teamName }}<br>Nationality: {{ d.nationality }}
  <br>Drivers: 
  {% for driver in d.drivers %}
    {{ driver }} 
  {% endfor %}
  </p></div>
{% endfor %}
{% endblock %}

【讨论】:

  • 完美,出色地完成了这项工作。非常感谢!
猜你喜欢
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多