如何在 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>
现在设置功能不再需要数据库查询了!
我正在尝试将我当前用户的用户名添加到我的 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>
现在设置功能不再需要数据库查询了!