我需要一个可以从模板调用的全局变量。
我在lib目录中编辑app_globals.py以声明像这样的PATH_TO_IMAGES
class Globals(object):
"""Container for objects available throughout the life of the application.
One instance of Globals is created during application initialization and
is available during requests via the 'app_globals' variable.
"""
PATH_TO_IMAGES = ""
def __init__(self):
"""Do nothing, by default."""
pass
现在我可以从任何模板调用像这样的图像路径
<img src="${g.PATH_TO_IMAGES}/${p.image}" />
图像路径存储在应用程序数据库的设置表中,但我无法从Globals声明初始化它,我收到此错误:
sqlalchemy.exc.UnboundExecutionError: 找不到配置的绑定 映射器 映射器|设置|设置, SQL表达式或此会话
我的猜测是数据库绑定在Globals初始化之后发生。所以我的问题是,这是在TurboGears 2中初始化全局变量的最佳位置,这是最佳实践。
答案 0 :(得分:1)
只需使用缓存属性:
class Globals(object): """Container for objects available throughout the life of the application. One instance of Globals is created during application initialization and is available during requests via the 'app_globals' variable. """ @property def PATH_TO_IMAGES(self): try: return self._path_to_images except AttributeError: self._path_to_images = db_session.query(XXX) # Fill in your query here return self._path_to_images
PS:你的问题确实是一个普通的Python问题。我建议你在发布其他类似问题之前阅读官方Python文档。
答案 1 :(得分:0)
您可能需要创建自己的数据库连接以从数据库中获取此数据。
在SQLAlchemy术语中,您需要创建自己的引擎,会话等。只需确保在完成后进行清理。
我可能会在app_cfg.py
中使用on_startup将其添加到配置中,然后如果您仍需要将其粘贴到Globals对象中。
答案 2 :(得分:0)
初始化模型后,您可以将PATH_TO_IMAGES设置为其确定值。越早在模型/ init .py中声明的'init_model'函数结束时。