我有一个使用 Flask 的网站。它曾经运行良好,但最近以来,每个请求都返回 404,并且似乎找不到正确的端点。然而:
url_for
有效,并且 app.view_functions
也包含所有路线。/
以及任何低于 /static/
的内容。这是部分代码,显示全部代码有点太多,而且并不全部相关:
#snip
from flask import Flask, render_template, abort, request, redirect, url_for, session
from flask.ext.babelex import Babel
from flask.ext import babelex
#snip
app = Flask(__name__)
app.secret_key = #snip
#snip
#just one of the routes
@app.route('/')
def about():
return render_template('about.html')
#snip
@app.errorhandler(404)
def page_not_found(e):
#snip
return render_template('404.html'), 404
#snip
if __name__ == '__main__':
app.run(debug=True)
else:
app.config.update(
SERVER_NAME='snip.snip.com:80',
APPLICATION_ROOT='/',
)
我也有同样的问题。我之所以拥有它,是因为我将配置的参数
SERVER_NAME
更改为不是服务器名称的名称。
如果有的话,您可以通过从配置中删除
SERVER_NAME
来解决此错误。
有同样的问题,因为以下几行
if __name__ == '__main__':
app.run(host='127.0.0.1', threaded=True)
在函数和装饰器之前声明。
将这些行移到文件的最底部对我很有帮助。
我知道这已经很旧了,但我刚刚遇到了同样的问题。你的问题可能有很多,但我的问题是我在
from app import views
文件中注释掉了 __init__.py
行。它给了我同样的症状:每个需要 @app.route
的端点和视图都以 404 响应。静态路由(.js 和 .css)很好(这是我的线索)。
此时已经非常旧了,但我的与导入错误有关。我正在使用蓝图,并且我有:
from app.auth import bp
而不是
from app.main import bp
我导入了错误的 bp/路线
我在 create_app 方法中定义 Flask_restful 路由时收到此错误。我仍然不太明白为什么它不起作用,但是一旦我更改了范围/将其移到外面,如下所示,它就起作用了。
from flask import Flask
from flask_restful import Resource
from extensions import db, api
from users.resources import User
def create_app():
app = Flask(__name__)
app.config.from_object('settings')
db.init_app(app)
api.init_app(app)
return app
api.add_resource(User, '/users')
还要仔细检查路线。如果有些不以斜杠结尾,但你用尾部斜杠调用它,flask 将返回 404。
我在 url 来自电子邮件客户端之后遇到此错误(我不知道为什么)在 url 中附加了一个尾部斜杠。
请参阅文档。
我遇到了这个问题,就我而言,这是关于我的
templates
。我有一个像这样的索引页:
<div>
<a href="index.html">Home</a> |
<a href="login.html">Login</a> |
<a href="register.html">Register</a>
<hr>
</div>
我应该使用
url_for('index')
而不是 index.html
。
<div>
<a href="{{ url_for('index') }}">Home</a> |
<a href="{{ url_for('login') }}">Login</a> |
<a href="{{ url_for('register') }}">Register</a>
<hr>
</div>
对我来说,由于缺少
favicon.ico
和 manifest.json
,我的每个请求都收到 404。解决方案是提供缺失的 favicon.ico
,并删除对 manifest.json
的链接相关引用。
我通过打印在我的
@app.errorhandler(Exception)
中的每个请求上导致问题的路径发现了这一点:
from flask import request
@app.errorhandler(Exception)
def handle_exception(err):
path = request.path # this var was shown to be 'favicon.ico' or 'manifest.json'
可能对某人有用。有一次,我同时打开了两个项目,结果一不小心跑错了一个。因此,如果您阅读此线程,请尝试运行“pwd”来检查您当前正在使用哪个文件夹。