{'page':1}究竟是什么意思? “BuildError:('main.user_profile',{'page':1},None)”

时间:2015-05-08 11:36:50

标签: python flask web-deployment werkzeug

我正在尝试为1个用户的帖子制作一个Pagination对象。 当用户是current_user:

时,一切都OK
@auth.route('/auth/edit_profile', methods=['GET', 'POST'])
def edit_profile():
    ###
    page = request.args.get('page', 1, type=int)
    pagination = current_user.posts.order_by(Post.timestamp.desc()).paginate(
            page, per_page=15, error_out=False)
    posts = pagination.items
    return render_template('auth/edit_profile.html', form=form, 
            user=current_user, posts=posts, pagination=pagination)

但是如果在这样的方法中查询它:

@main.route('/user/<username>')
def user_profile(username):
    target_user = User.query.filter_by(username=username).first()
    if not target_user:
        abort(404)
    page = request.args.get('page', 1, type=int)
    pagination = target_user.posts.order_by(Post.timestamp.desc()).paginate(
            page, per_page=15, error_out=False)
    posts = pagination.items
    return render_template('user_profile.html', user=target_user, posts=posts,
                           pagination=pagination, page=page)

这是编译时的问题。

werkzeug.routing.BuildError
BuildError: ('main.user_profile', {'page': 1}, None)

我知道这种错误与没有特定视图功能的路由有关。在这种情况下,这是否意味着我没有指定Page-1-content或什么?

请帮助我..我正在从头开始学习编码0.0

2 个答案:

答案 0 :(得分:0)

这意味着它无法在主蓝图中找到一个名为user_profile的函数(如果您使用的是url_for),并且此函数应该使用一个名为page的参数。例如像这样。

@WebApp.app.route('/errors_log/<int:page>', methods=['GET', 'POST'])
@flask_login.login_required
   def errors_log(page):

答案 1 :(得分:0)

Zyber是正确的,但这里有更多信息:

werkzeug.routing.BuildError
BuildError: ('main.user_profile', {'page': 1}, None)

表示没有名为user_profile的路由接受page的命名参数。您的路线名为user_profile,但它只接受username参数,如

中所定义
@main.route('/user/<username>')
def user_profile(username):

我可以看到你在请求中寻找pages GET变量:

page = request.args.get('page', 1, type=int)

请注意,您不会将GET参数传递给模板中的url_for,因为这会使Flask将其渲染为部分URL路由而不是GET参数。您没有名为user_profile的方法在路由中使用page变量。

相反,请尝试

{{ url_for('user_profile', username=[username]) }}?page=[page #]