Flask视图在单独的模块中

时间:2013-12-01 12:05:13

标签: python python-3.x flask

flaskr.py

# flaskr.py    
from flask import Flask


app = Flask(__name__)

import views


if __name__ == "__main__":
    app.run()

views.py

# views.py
from flaskr import app
from flask import render_template, g

@app.route('/')
def show_entries():
    entries = None
    return render_template('show_entries.html', entries=entries)

python3 flaskr.py

任何人都可以告诉我为什么这不起作用,但如果我将整个应用程序移动到一个单独的包中,它将完美无瑕。

没有错误,除了像views.py这样的404之外没有任何错误被忽略。 我知道Flask,我正在尝试不同的东西来理解它是如何工作的。

谢谢!

4 个答案:

答案 0 :(得分:5)

如果您想移动观看其他档案,您需要注册blueprint

flask.py

# flaskr.py    
from flask import Flask
from .views import my_view

app = Flask(__name__)
app.register_blueprint(my_view)

if __name__ == "__main__":
    app.run()

views.py

# views.py
from flaskr import app
from flask import render_template, g

my_view = Blueprint('my_view', __name__)

@app.route('/')
def show_entries():
    entries = None
    return render_template('show_entries.html', entries=entries)

类似问题:

答案 1 :(得分:3)

显然这与app.root_path有关。在views.py app.root_path = / path / to / project / flaskr中,但在flaskr.py app.root_path = / path / to / project中。 因此,烧瓶希望将views.py放入包中。

答案 2 :(得分:0)

我通过在flaskr.py中添加通配符为我解决了此问题。我最初在https://github.com/jennielees/flask-sqlalchemy-example看到了这个想法,但是我现在正在尝试制定一个蓝图,因为从长远来看,最好保留代码。

flaskr.py

# flaskr.py    
from flask import Flask

app = Flask(__name__)

# import views
from views import *

if __name__ == "__main__":
    app.run()

views.py

# views.py
from flaskr import app
from flask import render_template, g

@app.route('/')
def show_entries():
    entries = None
    return render_template('show_entries.html', entries=entries)

答案 3 :(得分:0)

在1.1.x版中,通过将视图函数未修饰放在单独的模块(例如views.py)中,并在应用文件中将其命名为add_url_rule() method where the views are loaded lazily from a separate moduleviews.app.add_url_rule(path, view_func=views.view_func)相同,其方式与我们在相同文件中将路由装饰器置于其视图函数上方的方式相同。

I'd also like to add this post as a resource