2016-09-08 358 views
7

在官方Quickstart,建議使用單一模塊時使用__name__燒瓶( '應用')對燒瓶(__ name__)

  • ...如果您使用的是單個模塊(如本示例中所示),則應使用__name__,因爲根據它是否作爲 應用程序啓動或作爲模塊導入,名稱將與實際導入名稱不同 ('__main__')不同。

    所以重要的是你提供什麼有...

  • 然而,在他們API document,當我的應用程序是一個推薦硬編碼。如果您使用的是單個 模塊,則__name__始終是正確的值。如果你使用的是軟件包 ,通常建議在那裏硬編碼你的 軟件包的名稱。

    我可以理解爲什麼硬編碼我的軟件包的名稱更好,但爲什麼不硬編碼單個模塊的名稱?或者換句話說,當它收到__main__作爲其第一個參數時,Flask會得到什麼信息?我看不出這是如何使Flask更容易找到資源...

    回答

    7

    __name__只是一種獲取應用程序定義位置的導入名稱的簡便方法。 Flask使用導入名稱來知道在哪裏查找資源,模板,靜態文件,實例文件夾等。使用軟件包時,如果您在__init__.py中定義應用,那麼__name__仍將指向相對於其中的「正確」位置資源是。但是,如果您在別處定義它,例如mypackage/app.py,則使用__name__會告訴Flask查找相對於mypackage.app而不是mypackage的資源。

    使用__name__與「硬編碼」不正交,它只是使用軟件包名稱的快捷方式。也沒有理由說應該是是基礎包,它完全取決於你的項目結構。

    +0

    你能詳細說一下「正確」的地方嗎? AFAIK,包__init __。py中的'__name__'將是該包的名稱。那麼哪個地方被認爲是「正確的」? –

    +0

    通常,基本包名稱是正確的。你有沒有嘗試過,並有一個特定的問題? – davidism

    +0

    還沒有。我剛開始做實驗並嘗試瞭解任何事情...... –