我正在向模板发送用户列表,并希望显示已登录的用户。但是,当我遍历它们并检查is_authenticated
时,它总是错误的。以下代码不显示用户名,但我希望它显示当前用户的名称。
{% for user in users %}
{% if user.is_authenticated %}
{{ user.username }}
{% else %}
-
{% endif %}
{% endfor %}
我尝试使用current_user
,但只显示当前用户,而不是所有用户列表。
答案 0 :(得分:1)
is_authenticated
对所有用户都适用,即使他们没有登录。只有匿名用户未经过身份验证。如果您只想显示登录用户,请使用current_user
。如果要在列表中标记登录用户,请在迭代时将每个用户与current_user
进行比较。
<ul>{% for user in users %}
<li>{{ user.username }}{% if user.username == current_user.username %} (current){% endif %}</li>
{% endfor %}</ul>
如果您继承is_authenticated
(或者您自己定义),您的用户类将只有UserMixin
属性。 Jinja将未知变量解释为false,因此如果你不是子类,那么Jinja总是认为is_authenticated
是假的,因为它不存在。
from flask_login import UserMixin
class User(db.Model, UserMixin):
...
了解登录用户的完整列表是一个更大的问题。该请求仅知道当前用户,因为登录是在每个用户的浏览器上使用cookie处理的。您的应用程序需要设置其他方式来跟踪谁登录。例如,您可以存储每个用户登录模型的时间,然后考虑他们是否在一天内登录。