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}" />

画像パスはアプリのデータベースの設定テーブル内に保存されていますが、グローバル宣言から初期化できません。次のエラーが発生します。

sqlalchemy.exc.UnboundExecutionError:マッパーマッパー|設定|設定、SQL式、またはこのセッションで構成されたバインドが見つかりませんでした

私の推測では、データベースのバインドはグローバルが初期化された後に発生します。だから私の質問は、TurboGears 2でグローバル変数を初期化するのに最適な場所であり、そのためのベストプラクティスです。

4

3 に答える 3

1

キャッシュされたプロパティを使用するだけです:

クラス グローバル (オブジェクト):
    """アプリケーションの存続期間を通じて利用可能なオブジェクトのコンテナ。

    Globals の 1 つのインスタンスは、アプリケーションの初期化中に作成され、
    「app_globals」変数を介したリクエスト中に利用できます。

    """

    @財産
    def PATH_TO_IMAGES(自己):
        試す:
            self._path_to_images を返す
        AttributeError を除く:
            self._path_to_images = db_session.query(XXX) # ここにクエリを入力します
            self._path_to_images を返す

PS : あなたの質問は本当に一般的な Python の質問です。他の同様の質問を投稿する前に、公式の Python ドキュメントを読むことをお勧めします。

于 2009-12-27T01:06:14.300 に答える
0

モデルが初期化されたら、PATH_TO_IMAGES を明確な値に設定できます。model/ init .pyで宣言されている「init_model」関数の最後にある方が早いです。

于 2009-11-21T02:46:33.733 に答える
0

データベースからこのデータを取得するには、おそらく独自のデータベース接続を作成する必要があります。

SQLAlchemy の用語では、独自のエンジン、セッションなどを作成する必要があります。完了したら必ずクリーンアップしてください。

おそらく、on_startupapp_cfg.pyを使用して構成に取り込み、必要に応じて後で Globals オブジェクトに貼り付けます。

于 2009-11-05T17:13:07.967 に答える