【发布时间】:2015-07-11 00:00:03
【问题描述】:
当用户使用包含 3 个以上子路径的 URL(例如“domain.com/var1/var2/var3/var4”)打开我的烧瓶应用程序时,它会引发以下错误:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1478, in full_dispatch_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1574, in make_response
rv = self.response_class(rv, headers=headers, status=status)
File "/usr/local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 758, in __init__
self.status = status
File "/usr/local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 862, in _set_status
self._status = to_native(value)
File "/usr/local/lib/python2.7/site-packages/werkzeug/_compat.py", line 111, in to_native
return x.encode(charset, errors)
AttributeError: 'NotFound' object has no attribute 'encode'
它适用于具有小于或等于 3 个子路径(如“domain.com/var1/var2/var3”)的 url,但我有具有 1、2 和 3 个子路径的 url 的路由。
如何让我的应用程序转到 404 Page Not Found 方法而不是抛出此错误?
谢谢!
编辑.. 这是我正在使用的路由方法的粘贴箱。 http://pastebin.com/kjYsqk9n
抱歉,我无法提供此问题的示例,这真的很奇怪,我不知道如何自己重现它。我的其他烧瓶应用程序工作正常,这个不行。如果有人需要澄清,请告诉我...感谢您的所有帮助!
【问题讨论】:
-
我认为我们需要多看一些你的烧瓶代码才能确定地说出任何事情——你能发布相关的内容吗?您的视图代码的某些部分可能是?
-
您好,谢谢您的回复。我把相关的烧瓶代码放在一个pastebin中:pastebin.com/kjYsqk9n
-
谢谢!当您导航到其他不存在的页面时,404 是否正常发生?
-
@Walker,我不这么认为,例如,如果您访问 /
/ 页面,在路由方法中我使用库来查看该国家和州是否存在,如果没有,我返回 page_not_found()。但它只返回 404,因为我告诉它。所以除了我创建的路由方法之外,404 不会发生并抛出上面的错误。 -
我记得读过有关 apache 如何禁止 werkzeug 工作(或类似的东西)的文章,这就是为什么堆栈跟踪不显示在 apache 运行的服务器上,这可能是它不工作的原因吗? (对不起,如果我没有意义,只是回忆很久以前)