2012-11-12 25 views
1

我正在構建一個瓶子的簡單擴展,並有一個url_for函數無法在擴展內部構建URL的問題。url_for生成器錯誤的瓶頸擴展與可插入的意見

有人能幫我弄清楚我在這裏失蹤了什麼嗎?

我簡化了代碼來演示這個問題(所有url_for調用養WERKZEUG BuildError除外):

import flask 
import flask.views 

import logging 
logging.basicConfig(level=logging.DEBUG) 

class MyFlaskExt(object): 
    def __init__(self, app=None): 
     if app is not None: 
      self.init_app(app) 

    def init_app(self, app): 
     self.blueprint = flask.Blueprint('myext', __name__, static_folder='static', template_folder='templates') 
     self.blueprint.add_url_rule('/', view_func=RootView.as_view('root'), endpoint='root') 
     self.blueprint.add_url_rule('/var/<somevar>', view_func=VarView.as_view('var'), endpoint='var') 
     self.blueprint.add_url_rule('/novar', view_func=NoVarView.as_view('novar'), endpoint='novar') 
     app.register_blueprint(self.blueprint) 


class RootView(flask.views.View): 
    def dispatch_request(self): 
     logging.debug(flask.url_for('novar')) 
     logging.debug(flask.url_for('novar', _external=True)) 
     return flask.redirect(flask.url_for('var', somevar='test')) 

class VarView(flask.views.View): 
    def dispatch_request(self, somevar): 
     return "SUCCESS! ({})".format(somevar) 

class NoVarView(flask.views.View): 
    def dispatch_request(self): 
     return "SUCCESS!" 

if __name__ == '__main__': 
    app = flask.Flask(__name__) 
    app.debug = True 
    my_ext = MyFlaskExt() 
    my_ext.init_app(app) 
    logging.debug(app.url_map) 
    app.run() 

回答

4

Blueprint終點的Blueprint的名義登記。如果我沒有記錯,您需要用「。」加上url_for來電。 (如果他們都將在同一藍圖下運行),或使用全名:

def dispatch_request(self): 
    logging.debug(flask.url_for('.novar')) 
    logging.debug(flask.url_for('.novar', _external=True)) 
    return flask.redirect(flask.url_for('.var', somevar='test')) 
+0

諷刺意味的是,你的工作修復我的樣品,但不是我真正的代碼...現在我只需要找出我簡化時錯過了;) – selkie