用于循环输出范围



我是Python烧瓶的新手,想把循环的结果放在变量中,但似乎超出了范围。

如何在下面的代码段中将其获取到父作用域,即视图作用域?

@users.route('/list', methods=['GET'])
@login_required
users = User.query.all()
link_count = {}
for user in users:
link_count = Link.query.filter(Link.user_id == user.id).count()
flash(f'{link_count}') # works and gives me a list/ array
flash(f'{link_count}') # null
return render_template('user_stats.html', title='Users', users=users)

这是一种使用循环的糟糕方法。您将为每个用户向数据库发出SQL请求。您所需要的只是通过SQLAlchemy按函数创建一个组。你可以在这里找到一个例子https://stackoverflow.com/a/4086229/14690802

使用这个,然后在模板中引用jinja中的link_count变量

@users.route('/list', methods=['GET'])
@login_required
users = User.query.all()
link_count = {}
for user in users:
link_count = Link.query.filter(Link.user_id == user.id).count()
flash(f'{link_count}') # works and gives me a list/ array
flash(f'{link_count}') # null
return render_template('user_stats.html', title='Users', users=users, link_count=link_count )

你在模板端使用的任何数据都必须作为render_template方法中的参数发送

第1版:

我不知道你为什么用字典来计算link_count。为了证明使用字典的合理性,你应该在for循环中做这样的事情

link_count[user.id] = Link.query.filter(Link.user_id == user.id).count()

然后在你的jinja模板中,你可以引用像这样的数据点

{{ link_count[1] }}

最新更新