2012-07-25 49 views

回答

2

我實際上已經在一個名爲Hip Pocket的項目中草擬了類似的東西。它基本上是相同的答案@HighCat給你,除非它使用Python的包裝系統,而不是一個config.py文件(雖然它可以從一個配置文件可以擴展到自動加載,而不是 - issuespull 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) 
1

瓶是不是Django的,它不具備這樣的功能。 如果你真的需要這一點,你可以嘗試實現這一行爲自己:

假設你有中央瓶的應用程序文件與:

import flask 
app = flask.Flask(__name__) 
  1. 把你的藍圖可變進瓶的配置(您註冊一個與app.config.from_pyfile(...)),所以它可以通過app.config ['BLUEPRINTS']
  2. 在您的中央應用程序文件(你做app = flask.Flask(__ name__)),只是遍歷app.config ['BLUEPRINTS'],嘗試從它們可能存在的地方導入它們,並將它們註冊到app.register_blueprint()。
+0

據我所知,Flask不是Django的克隆,我需要自己實現它。基本我知道我需要迭代app.config ['BLUEPRINTS']並使用'__import__'。但是,如何通過不帶'eval()'的'__import__'藍圖註冊導入? – Ticksy 2012-07-25 09:31:30

+0

嘗試getattr()Smth like app.register_blueprint(getattr(\ _ \ _ import \ _ \ _(module_name),'the_blueprint'))。如果您的藍圖是軟件包,請將「the_blueprint」放入每個 /\_\_init\_\_.py – HighCat 2012-07-25 10:06:01

相關問題