如何在Django中像我的配置一樣註冊Flask Blueprints?如何在Django中像配置應用程序一樣註冊Flask Blueprints?
我想在配置文件中定義藍圖,這將是自動註冊
#config.py
BLUEPRINTS = (
'news',
'files',
)
如何在Django中像我的配置一樣註冊Flask Blueprints?如何在Django中像配置應用程序一樣註冊Flask Blueprints?
我想在配置文件中定義藍圖,這將是自動註冊
#config.py
BLUEPRINTS = (
'news',
'files',
)
我實際上已經在一個名爲Hip Pocket的項目中草擬了類似的東西。它基本上是相同的答案@HighCat給你,除非它使用Python的包裝系統,而不是一個config.py
文件(雖然它可以從一個配置文件可以擴展到自動加載,而不是 - issues和pull requests者居多)
所以在褲袋裏,你可以這樣做(見hip_pocket.tasks
它是如何工作):
from flask import Flask
from hip_pocket.tasks import autoload
app = Flask(__name__)
autoload(app)
autoload
走一包(名爲「應用程序」默認情況下,儘管你可以通過在關鍵字ARG apps_package
改變它)尋找要在應用程序上註冊flask.Blueprint
對象(默認情況下它會查找符號一中找到的每個子包命名routes
模塊在名爲routes
但這些默認值是可以改變的爲好)你的文件夾佈局威力這個樣子的:
+ you_app
. . . . __init__.py
. . . . app.py
. . . . + apps
. . . . __init__.py
. . . . routes.py # contains the declaration `routes = Blueprint(...)`
. . . . + news
. . . . __init__.py
. . . . routes.py # Ditto
. . . . some_module.py
. . . . + files
. . . . __init__.py
. . . . routes.py # Ditto
. . . . # etc.
另外,如果你想使用一個配置基礎裝載機,你可以這樣做:
from flask import Flask
from werkzeug.utils import import_string
app = Flask(__name__)
app.config.from_object("your_app.config")
for tool_path in app.config["BLUEPRINTS"]:
tool = import_string(tool_path)
app.register_blueprint(tool)
瓶是不是Django的,它不具備這樣的功能。 如果你真的需要這一點,你可以嘗試實現這一行爲自己:
假設你有中央瓶的應用程序文件與:
import flask
app = flask.Flask(__name__)
據我所知,Flask不是Django的克隆,我需要自己實現它。基本我知道我需要迭代app.config ['BLUEPRINTS']並使用'__import__'。但是,如何通過不帶'eval()'的'__import__'藍圖註冊導入? – Ticksy 2012-07-25 09:31:30
嘗試getattr()Smth like app.register_blueprint(getattr(\ _ \ _ import \ _ \ _(module_name),'the_blueprint'))。如果您的藍圖是軟件包,請將「the_blueprint」放入每個 /\_\_init\_\_.py –
HighCat
2012-07-25 10:06:01