2012-06-05 41 views
12

金字塔項目中有一個development.ini或production.ini文件。我在 添加自己的配置數據的INI文件,如:如何獲取金字塔中的ini數據?

[thrift] 
host = 0.0.0.0 
port = 8080 

,我想在項目中的PY文件的一個使用配置數據。 如何獲取沒有請求對象的數據? (我見過使用請求的解決方案。)

回答

21

您可以訪問request.registry.settingspyramid.threadlocal.get_current_registry().settings的設置。它的行爲就像字典。

如果你想使用第二個,那就是獲取沒有請求的設置,我必須警告你。根據the doc

該函數應當非常謹慎使用,通常只在單元 測試代碼。在測試上下文之外使用get_current_registry幾乎總是錯誤的,因爲它的使用使 有可能編寫既不易測試也不可編寫腳本的代碼。

需要訪問設置的代碼的任何部分都是Web應用程序的一部分,並且應該訪問請求,而不是一些神奇的全局訪問。你可能認爲你有一個很好的理由,但可能有更好的方法。如果你想討論這個問題(也許在另一個問題中,如果它很複雜,有些代碼會有所幫助),我會很樂意幫助你找到一個乾淨的方法來做到這一點。

+1

謝謝。編輯以便在答案中更清楚。順便說一句,註冊表不是設置文件(請參閱http://pyramid.readthedocs.org/en/1.3-branch/glossary.html#term-application-registry)。 – madjar

+0

請注意,要添加自定義設置並使用此答案,您不能將其添加到新的部分。您需要將其添加到現有的[app:main]部分。請參閱[文檔](http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting)。 – Zitrax

2

每當我想知道如何在金字塔中做點什麼時,我通常會參考github上的一個金字塔示例。

Parsing Example Pyramid Config

我不知道他們是如何 「pyrmadic」 是,但他們usaully做工精細。在這裏,他們只是使用ConfigParser就像你在任何python項目中解析你的.ini文件一樣

-2

想'python'而不是'pyramid'。

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read('development.ini') 
db_url = config.get('app:main', 'sqlalchemy.url') 
+1

金字塔在他們的無限智慧中使用'PasteDeploy'。 'ConfigParser'將不起作用:它不接受在關鍵名稱中包含'.'。 – NuclearPeon

+1

硬編碼是不好的做法。 – karantan