金字塔項目中有一個development.ini或production.ini文件。我在 添加自己的配置數據的INI文件,如:如何獲取金字塔中的ini數據?
[thrift]
host = 0.0.0.0
port = 8080
,我想在項目中的PY文件的一個使用配置數據。 如何獲取沒有請求對象的數據? (我見過使用請求的解決方案。)
金字塔項目中有一個development.ini或production.ini文件。我在 添加自己的配置數據的INI文件,如:如何獲取金字塔中的ini數據?
[thrift]
host = 0.0.0.0
port = 8080
,我想在項目中的PY文件的一個使用配置數據。 如何獲取沒有請求對象的數據? (我見過使用請求的解決方案。)
您可以訪問request.registry.settings
或pyramid.threadlocal.get_current_registry().settings
的設置。它的行爲就像字典。
如果你想使用第二個,那就是獲取沒有請求的設置,我必須警告你。根據the doc:
該函數應當非常謹慎使用,通常只在單元 測試代碼。在測試上下文之外使用get_current_registry幾乎總是錯誤的,因爲它的使用使 有可能編寫既不易測試也不可編寫腳本的代碼。
需要訪問設置的代碼的任何部分都是Web應用程序的一部分,並且應該訪問請求,而不是一些神奇的全局訪問。你可能認爲你有一個很好的理由,但可能有更好的方法。如果你想討論這個問題(也許在另一個問題中,如果它很複雜,有些代碼會有所幫助),我會很樂意幫助你找到一個乾淨的方法來做到這一點。
每當我想知道如何在金字塔中做點什麼時,我通常會參考github上的一個金字塔示例。
Parsing Example Pyramid Config
我不知道他們是如何 「pyrmadic」 是,但他們usaully做工精細。在這裏,他們只是使用ConfigParser
就像你在任何python項目中解析你的.ini文件一樣
想'python'而不是'pyramid'。
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('development.ini')
db_url = config.get('app:main', 'sqlalchemy.url')
金字塔在他們的無限智慧中使用'PasteDeploy'。 'ConfigParser'將不起作用:它不接受在關鍵名稱中包含'.'。 – NuclearPeon
硬編碼是不好的做法。 – karantan
謝謝。編輯以便在答案中更清楚。順便說一句,註冊表不是設置文件(請參閱http://pyramid.readthedocs.org/en/1.3-branch/glossary.html#term-application-registry)。 – madjar
請注意,要添加自定義設置並使用此答案,您不能將其添加到新的部分。您需要將其添加到現有的[app:main]部分。請參閱[文檔](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting)。 – Zitrax