1

django の設定ファイルをシミュレートしようとしています。管理者が変更できるいくつかの設定をホストするモデルを構築した場所。概念は正常に機能しますが、値が変更されたときにコードが新しい変更を反映していないときに奇妙な動作をします。

これが私のcore_settingsです

class CoreSettings(object):
    def __getattr__(self, item):
        try:
            return Configuration.objects.get(key=item).value
        except Configuration.DoesNotExist :
            return getattr(settings, item)

core_settings = CoreSettings()

基本的に上記を次のように使用しています

SF_PUBLICATION_PAGINATION_PP = int(getattr(core_settings, 'SF_PUBLICATION_PAGINATION_PP'))

SF_PUBLICATION_PAGINATION_PP は構成モデルから正しい値を取得していますが、フィールド値を更新しても反映されません。ファイルを変更して、変更を取得している場所で再コンパイルする場合にのみ..

何か案は?


アップデート:

ランサーバーが更新されたときにのみ変更が見られるようです。

4

2 に答える 2

2

はい、設定の値は更新されていません。これは、settings.py が「ロード」されたときに値が設定されるためです。これは、開発環境で「runserver」を実行した場合などに発生します。

したがって、次のようにして対処できます。

def get_live_setting(key):
try:
    return Configuration.objects.get(key=key).value
except Configuration.DoesNotExist :
    return getattr(settings, key)

# get SF_PUBLICATION_PAGINATION_PP's value
get_live_setting('SF_PUBLICATION_PAGINATION_PP')

これで問題を解決できますが、正しい方法は遅延評価を使用することです。ここにいくつかのサンプルがあり、ここに「lazy-python」に関する面白い投稿があります。

于 2013-01-03T00:49:36.130 に答える
1

この目的のために設計されたパッケージを使用するのはどうですか?

見て:django-livesettings

使用しないことにした場合でも、いつでもそこでどのように行われているかを見ることができます!


あなたの特定の問題について。フィールド値をどのように更新しますか? 値がexcept句からではなく、データベースから取得されていることを確認してください。

于 2013-01-02T18:59:05.987 に答える