使用 id 创建链接:href = "{{ url_for('users/%s'%user[0]) }}" /pb 带有端点和构建 URL (jinja/python/flask)



我正在做一个有 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])

最新更新