无法解释的Flask 404错误

时间:2014-06-26 18:02:11

标签: python flask

我有一个使用Flask的网站。它曾经运作良好,但从最近,每个请求返回404,似乎它找不到正确的端点。但是:

  • 在本地,该网站仍然有效,只有在我的VPS上才显示出这种奇怪的行为。
  • url_for有效,app.view_functions也包含所有路线。
  • 然而,我继续在VPS上获得404,即使是/以及/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='/',
    )

7 个答案:

答案 0 :(得分:39)

我有同样的问题。我有它因为我将配置的参数SERVER_NAME更改为不是服务器名称的名称。

您可以通过从配置中删除SERVER_NAME来解决此错误。

答案 1 :(得分:8)

我知道这已经过时了,但我遇到了同样的问题。你的问题可能是任何问题,但我的问题是我在from app import views文件中注释了__init__.py行。它给了我相同的症状:每个需要@app.route的端点和一个视图用404响应。静态路由(.js和.css)很好(这是我的线索)。

答案 2 :(得分:0)

此时非常古老,但我的导入错误与我有关。我正在使用蓝图,我有:

from app.auth import bp

而不是

from app.main import bp

我导入了错误的bp / routes

答案 3 :(得分:0)

我在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') 

答案 4 :(得分:0)

由于以下几行而出现相同的问题

if __name__ == '__main__':
    app.run(host='127.0.0.1', threaded=True)

在函数和装饰器之前声明。

将这些行移到文件的最底部对我有帮助。

答案 5 :(得分:0)

我遇到了这个问题,就我而言,是我的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>

答案 6 :(得分:0)

还要仔细检查路线。如果某些不以斜杠结尾,但是您以斜杠结尾,烧瓶将返回404。

我收到来自电子邮件客户端的URL 后出现此错误(我不知道为什么),在URL后面加上了斜杠。

See文档。