Обычно id
в таблице базы данных - это primary key
, что означает unique
и not null
. Уникальность - это ключ (без каламбура), поскольку при выполнении этой строки comments = Comments.query.filter_by(id=pid).all()
вы получите только один комментарий с помощью ограничения первичного ключа.
Обратите внимание, во-вторых, в jijna2 есть фильтр, позволяющий передавать объекты python в jinja2 без форматирования JSON, и его можно преобразовать непосредственно в html, например:
render_template('some.html', arr=[1,2,3], dict={'pigs': 'nice', 'fish': 'unfriendly'})
===============
<div> {{ arr | tojson }} {{ dict | tojson }} </div>
Кстати, обратите внимание, что вы можете поместить эту строку: post = Posts.query.filter_by(id=pid).first()
в верхней части функции, чтобы в некоторых случаях ее не вызывали дважды. На самом деле это неправда, его когда-либо будут вызывать только один раз, но, на мой взгляд, он выглядит лучше, если набирать его один раз! :)
Изменить ..
Я предполагаю, что Comments
таблица. Допустим, у вас есть модель базы данных, которая выглядит следующим образом (я только догадываюсь):
def Comments(db.Model):
id = db.Column(db.Integer, primary_key=True)
post_id = db.Column(db.Integer, db.ForeignKey('posts.id'), nullable=False)
data = db.Column(db.String)
Затем вы можете создать генератор диктов для Comment
класса. Есть много мест, где вы могли бы сделать это, но здесь это явная функция.
def comment_dict(comment):
return dict(id=comment.id, post_id=comment.post_id, data=comment.data)
Затем вы можете сделать запрос к базе данных, чтобы вернуть итератор комментариев и использовать понимание списка для формирования списка диктов:
comments = Comments.query.all() # or some filtered subset
render_template(comments = [comment_dict(comment) for comment in comments])
В вашем html вы можете получить доступ к комментариям в виде массива JSON объектов JSON с помощью:
{{ comments | tojson }}