【问题标题】:How to initialize global variables in TurboGears 2 with values from a table如何使用表中的值初始化 TurboGears 2 中的全局变量
【发布时间】:2009-10-05 17:08:37
【问题描述】:

我需要一个可以从模板中调用的全局变量。

我在 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 中初始化全局变量的最佳位置,也是最佳实践。

【问题讨论】:

    标签: genshi turbogears2


    【解决方案1】:

    只需使用缓存的属性:

    类全局(对象): """在应用程序的整个生命周期中可用的对象的容器。 Globals 的一个实例是在应用程序初始化期间创建的,并且 在通过“app_globals”变量请求期间可用。 """ @财产 def PATH_TO_IMAGES(自我): 尝试: 返回 self._path_to_images 除了属性错误: self._path_to_images = db_session.query(XXX) # 在这里填写你的查询 返回 self._path_to_images

    PS:您的问题确实是一个通用的 Python 问题。我建议您在发布其他类似问题之前阅读官方 Python 文档。

    【讨论】:

      【解决方案2】:

      您可能需要创建自己的数据库连接才能从数据库中获取此数据。

      在 SQLAlchemy 术语中,您需要创建自己的引擎、会话等。只需确保在完成后进行清理。

      我可能会在 app_cfg.py 中使用 on_startup 将其放入配置中,然后如果您仍然需要,稍后将其粘贴到 Globals 对象中。

      【讨论】:

        【解决方案3】:

        模型初始化后,您可以将 PATH_TO_IMAGES 设置为它的确定值。越早在 model/init.py 中声明的 'init_model' 函数的末尾。

        【讨论】:

          猜你喜欢
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多