0

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

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

4

3 回答 3

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 文档。

于 2009-12-27T01:06:14.300 回答
0

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

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

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

于 2009-11-05T17:13:07.967 回答
0

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

于 2009-11-21T02:46:33.733 回答