就像@MartijnPieters 在对您自己的答案的评论中建议的那样,我会使用collective.recipe.template在.ini. 我想知道我如何才能在我的项目中访问这些数据,所以我解决了:-)
让我们倒退到你需要的东西。首先在您想要构建目录的视图代码中:
def your_view(request):
buildout_dir = request.registry.settings['buildout_dir']
....
request.registry.settings(参见文档)是一个“类似字典的部署设置对象”。请参阅部署设置,这就是**settings传递给您的主要方法的内容,例如def main(global_config, **settings)
这些设置是[app:main]您deployment.ini或production.ini文件的一部分。所以在那里添加 buildout 目录:
[app:main]
use = egg:your_app
buildout_dir = /home/you/wherever/it/is
pyramid.reload_templates = true
pyramid.debug_authorization = false
...
但是,这是最后一步,您不希望在其中包含硬编码路径。因此,使用模板生成 .ini。该模板development.ini.in使用${partname:variable}扩展语言。在您的情况下,您需要${buildout:directory}:
[app:main]
use = egg:your_app
buildout_dir = ${buildout:dir}
# ^^^^^^^^^^^^^^^
pyramid.reload_templates = true
pyramid.debug_authorization = false
...
添加一个构建部分以从以下buildout.cfg生成:development.inidevelopment.ini.in
[buildout]
...
parts =
...
inifile
...
[inifile]
recipe = collective.recipe.template
input = ${buildout:directory}/development.ini.in
output = ${buildout:directory}/development.ini
请注意,您可以使用collective.recipe.template 做各种很酷的事情。例如,在 your和 your${serverconfig:portnumber}中生成匹配的端口号。玩得开心!production.iniyour_site_name.nginx.conf