AttributeError: у объекта 'list' нет атрибута 'id' - PullRequest
0 голосов
/ 16 ноября 2018

Я использую Flask-SQLAlchemy с Flask для создания своего веб-сайта, и я продолжаю получать эту ошибку, когда пытаюсь посетить часть портфолио моего веб-сайта.

Traceback (most recent call last):
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/ec2-user/environment/jackmerrill.com/flask/lib/python3.6/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ec2-user/environment/jackmerrill.com/server.py", line 56, in portfolio
    return render_template("portfolio.html", cards = [portfolio_dict(projects) for project in projects])
  File "/home/ec2-user/environment/jackmerrill.com/server.py", line 56, in <listcomp>
    return render_template("portfolio.html", cards = [portfolio_dict(projects) for project in projects])
  File "/home/ec2-user/environment/jackmerrill.com/server.py", line 46, in portfolio_dict
    return dict(id=port.id, title=port.title, text=port.text, link=port.link, imagelink=port.imagelink)
AttributeError: 'list' object has no attribute 'id'

Соответствующий код находится здесь:

class Portfolio(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(100))
    text = db.Column(db.String(2000))
    imagelink = db.Column(db.String(2000))
    link = db.Column(db.String(2000))


# Create all database tables
db.create_all()

def portfolio_dict(port):
    return dict(id=port.id, title=port.title, text=port.text, link=port.link, imagelink=port.imagelink)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/portfolio')
def portfolio():
    projects = Portfolio.query.all()
    print(projects)
    return render_template("portfolio.html", cards = [portfolio_dict(projects) for project in projects])

РЕДАКТИРОВАТЬ: я вызываю переменную cards в файле HTML примерно так:

{{ cards | tojson }}

Что я могу сделать не так?Я использовал этот метод, чтобы взять целую таблицу SQLite и превратить ее в словарь Python раньше, а этого никогда не было.

Любая помощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 16 ноября 2018

В вашем коде есть опечатка. Это должно быть portfolio_dict(project), а не portfolio_dict(projects) в понимании списка.

...