就像@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.ini
development.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.ini
your_site_name.nginx.conf