首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >werkzeug.routing.BuildError同时尝试使用url_for重定向

werkzeug.routing.BuildError同时尝试使用url_for重定向
EN

Stack Overflow用户
提问于 2014-06-03 18:24:22
回答 1查看 2.3K关注 0票数 0

这是导致错误的路由:

代码语言:javascript
复制
@appHandler.route('/user/<int:userid>/', defaults = {'username' : None})
@appHandler.route('/user/<int:userid>/<username>/')

def profile(userid, username):
    user = User.query.filter_by(id = userid).first()

    if user.username != username:
        redirect(url_for(profile(userid, user.username)))

    return 'Finally!'

现在,当我输入

代码语言:javascript
复制
http://localhost:5000/user/14/sdfsdf/

代码语言:javascript
复制
http://localhost:5000/user/14/

我知道这个错误:

代码语言:javascript
复制
werkzeug.routing.BuildError
BuildError: ('Finally!', {}, None)

Traceback (most recent call last):
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/kevin/Code/python/flask/terminus/app/routes.py", line 32, in profile
    redirect(url_for(profile(userid, user.username)))
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/helpers.py", line 312, in url_for
    return appctx.app.handle_url_build_error(error, endpoint, values)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/app.py", line 1641, in handle_url_build_error
    reraise(exc_type, exc_value, tb)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/flask/helpers.py", line 305, in url_for
    force_external=external)
  File "/home/kevin/Code/python/flask/terminus/venv/lib/python2.7/site-packages/werkzeug/routing.py", line 1620, in build
    raise BuildError(endpoint, values, method)
BuildError: ('Finally!', {}, None)

https://gist.github.com/de115414a70171f048fb

FYI,userid = 13username = sdfsdfuser.username = rohitrk

帮个忙就好了。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 18:26:35

url_for将一个string作为它的第一个参数(它是端点的名称,这通常是函数的名称,但并不总是函数的名称)和url参数或查询字符串值的关键字参数。尝试:

代码语言:javascript
复制
url_for('profile', userid=userid, username=user.username)

在您的例子中所发生的事情是,profile在第二个实例上失败了,它被调用(当您在url_for中调用它并返回'Finally'时)。这意味着你在打电话:

代码语言:javascript
复制
url_for('Finally')

实际上,导致了BuildError

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24022302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档