我正在做一个有 2 个应用程序的项目(用 python/flask 构建)。 第一个应用程序.py是服务器 第二个 client.py 是客户端。
现在我正在从用户那里建立访问用户/8 的链接 但它不起作用
在用户下.html/client.py @route/来自金贾的消息
用户.html:
{%block body%}
<div class="users">
<div class="list-group">
{% for user in users %}
<a href ="{{ url_for('users/%s'%user[0]) }}" class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{{user[1]}}</h5>
<small>{{user[0]}}</small>
</div>
<p class="mb-1">{{user[2]}}</p>
<small>Know more...</small>
</a>
{% endfor %}
</div>
</div>
{%endblock%}
client.py:
@client.route('/users/<id>')#ok works
def user(id=None):
if 'logged_in' in session:
r = actualUser.get(id)
user=json.loads(r.text)
return render_template('user.html', user=user)
else:
return redirect(url_for('login'))
错误信息:
File "/home/elodieb/Rendu/Python/Flask/flask_d02/ex_03/Client/templates/users.html", line 1, in top-level template code
{%extends "base.html" %}
File "/home/elodieb/Rendu/Python/Flask/flask_d02/ex_03/Client/templates/base.html", line 44, in top-level template code
{%block body%}
File "/home/elodieb/Rendu/Python/Flask/flask_d02/ex_03/Client/templates/users.html", line 12, in block "body"
<a href ="{{ url_for('users/%s'%user[0]) }}" class="list-group-item list-group-item-action">
werkzeug.routing.BuildError: Could not build url for endpoint 'users/7'. Did you mean 'users' instead?
这里的错误消息非常明确。问题是在users.html
模板中无效地使用了url_for
函数。你已经写了这个
url_for('users/%s'%user[0])
但是url_for
期望一个"端点"参数(即相应路由的名称,这里'users'
)和变量作为关键字参数传递。有关用法的更多信息和示例,请访问:https://flask.palletsprojects.com/en/1.1.x/quickstart/#url-building
因此,您应该将该模板指令替换为
url_for('users', id=user[0])
不过,在修复此问题后,您最终可能会遇到其他错误,因为您要将单个user=user
变量传递给模板,而您希望遍历users
集合。
看起来users.html
正在寻找一个users
列表(见{% for user in users %}
),并且您正在传递一个user
实例(render_template('user.html', user=user)
)。
您可以修改模板而不使用for in
循环,或者更新对render_template
的调用,如下所示render_template('user.html', users=[user])