裏面一個燒瓶藍圖,我有:使用Flask Blueprints,如何修復如果指定一個子域時破解url_for?
frontend = Blueprint('frontend', __name__)
和我的索引功能的路線爲:
@frontend.route('/')
def index():
#code
這工作得很好,但我想一個子域添加到路由,像這樣:
@frontend.route('/', subdomain='<var>')
def index(var):
但是,這打破了應用程序和瀏覽器吐出來(除其他事項外):
werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)
frontend.index在我的代碼叫了幾個地方在url_for(「frontend.index」)
我怎樣才能得到url_for上班的時候,我包括一個子域?下列文件中的我唯一能找到,我想可能是相關的是這個http://flask.pocoo.org/docs/api/下:
集成應用程序,燒瓶帶有鉤子攔截URL通過Flask.build_error_handler建立 錯誤。如果當前應用沒有指定的 端點和值的URL,則url_for函數會在BuildError中產生 。如果它不是None,那麼current_app會調用它的 build_error_handler,它可以返回一個字符串 作爲url_for的結果(而不是url_for的默認值,以提高 BuildError異常)或者重新引發異常。舉個例子:
def external_url_handler(error, endpoint, **values):
"Looks up an external URL when `url_for` cannot build a URL."
# This is an example of hooking the build_error_handler.
# Here, lookup_url is some utility function you've built
# which looks up the endpoint in some external URL registry.
url = lookup_url(endpoint, **values)
if url is None:
# External lookup did not have a URL.
# Re-raise the BuildError, in context of original traceback.
exc_type, exc_value, tb = sys.exc_info()
if exc_value is error:
raise exc_type, exc_value, tb
else:
raise error
# url_for will use this result, instead of raising BuildError.
return url
app.build_error_handler = external_url_handler
不過,我是新來的Python(和編程),可以不明白的地方,我會把這個代碼或我將如何得到該功能時builderror發生時調用。
任何洞察力將不勝感激:)
您是否嘗試過加入''_external = True''你的url_for()調用? –
@chrickso:看到我的答案。它看起來像,你只需要提供不同的方法名稱。 – pyfunc