flasky学习过程中,有关分页的那部分使用url_for生成url的问题
假设查看的用户是haha
1.在用户头像创建的url
<a href="{{ url_for('.user', username = follow.user.username) }}">
生成的url是 http://xxx/user/haha
2.在下边分页创建导航栏的url
# 路由
@main.route('/followed_by/<username>')
def followed_by(username):
user = User.query.filter_by(username=username).first()
if user is None:
flash('Invalid user.')
return redirect(url_for('.index'))
page = request.args.get('page', 1, type=int)
pagination = user.followed.paginate(
page=page, per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'],
error_out=False)
follows = [{'user': item.followed, 'timestamp': item.timestamp}
for item in pagination.items]
return render_template('followers.html', user=user, title="Followed by",
endpoint='.followed_by', pagination=pagination,
follows=follows)
定义的宏
{% macro pagination_widget(pagination, endpoint) %}
...
<a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a>
模板调用宏
{{ macros.pagination_widget(pagination, endpoint, username = user.username) }}
为什么生成的url是 http://xxx/followers_by/haha?page=1
而不是是http://xxx/followers_by/?page=1&username=haha
希望老师讲解。
发现了原因
@main.route('/followed_by/<username>')
应为url_for提交的路由要求匹配<username>
当使用url_for(endpoint, page = p, username='haha')的时候
路由会自动匹配username='haha',所以生成的url变成了/followed_by/haha?page=1
路由会自动把匹配的参数提到?前边