如何在 URL Flask 中显示当前用户的用户名

How to display current user's username in URL Flask

我正在尝试将我当前用户的用户名添加到我的 URL(路由),但我不断收到错误消息。我已经尝试了下面提到的很多事情,但没有任何效果。这是我的代码:

@app.route("/settings/<string:Users_username>" , methods=["GET", "POST"])
def settings(Users_username):
    user = Users.query.filter_by(username=Users_username)
    return render_template("settings.html", user=user )

Layout.html:

<a href="{{url_for('settings', Users_username = user.username )}}" target="_blank" 
rel="noopener noreferrer">Settings</a>

当我尝试转到另一个页面时出现错误,当我进入设置时出现 404。

jinja2.exceptions.UndefinedError

jinja2.exceptions.UndefinedError: 'user' is undefined

MODELS.py

@login_manager.user_loader
def load_user(user_id):
   return Users.query.get(int(user_id))

class Users(db.Model, UserMixin):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String, unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

layout.html 或我的 routes.html 有问题吗?这基本上是一个功能,当点击设置时将带您进入设置页面,我希望登录用户的用户名出现在 URL.When 中,我更改 layout.html,然后我得到

404 error: Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again

我已确定用户已登录:{% if current_user.is_authenticated %} 我还尝试将 routes.py 更改为:

@app.route("/settings/<string:Users_username>" , methods=["GET", "POST"])
def settings(Users_username):
    user = Users.query.filter_by(username=Users_username)
    return render_template("settings.html", user=user.username )

其余同理(设置功能)。此更改出现错误:

AttributeError: 'BaseQuery' object has no attribute 'username'

试试这个 user = Users().query.filter_by(username=Users_username).first()

并且您不需要在 url 中提供字符串作为转换器类型,因为默认情况下它是字符串。 Have a look here

@Reef 几乎是正确的:在函数 settings(Users_username) 中替换:

user = Users.query.filter_by(username=Users_username)

来自

user = Users.query.filter_by(username=Users_username).first()

(或者更好的是 first_or_404() 你正在使用 Flask-Sqlalchemy)

经过 3 天的研究和对答案的渴望,阅读了多篇文章,观看了无数视频,只是在 layout.html 中随机尝试了这个方法!

<a href="{{ url_for('user', Users_username = current_user.username ) }}" 
target="_blank" rel="noopener noreferrer">Settings</a>

现在设置功能不再需要数据库查询了!