2012-03-25 11 views
8

私のサイトには、グローバル設定はほとんどありません。もちろん、例えば、「SMTPサーバアドレス」、「会社住所」などdjango-adminのサイト構成

私がすることができます:

  1. settings.pyで変数を作成し、テンプレートやアプリケーションでそれを使用します。
  2. Configurationのような)モデルを作成し、必要なすべてのフィールドをそこに記述します。

私が最初の方法を使用する場合、私はdjango-adminでこのフィールドを変更するためのアクセス権を与えることはできません。

私が秒針を使用すると、コード内のどこでもmodel_name.objects.get(id=1)が使用され、1つのインスタンスしか必要ないため、美しい解決策ではありません。モデルは別のタスク用に作成されました。

どうすればこの問題を解決できますか?

+1

今後、あなたの投稿のライブプレビューをチェックして、フォーマットがほぼ正しいことを確認してください。 –

+0

[django-solo](http://stackoverflow.com/a/20813571/1888983)([github](https:// github。com/lazybird/django-solo))がシングルトンを作成するのはかなり苦労していました。 – jozxyqk

答えて

6

これは私がやったことです。最も最適な解決策ではないかもしれませんが、私のために働きます。

  1. は、コンフィギュレーションモデルを作成し、ポイント2(configuration.viewで言う)関数を作成引き出し、辞書内の設定値を返しますのようにすべての通常のものを行います。あなたのsettings.pyで今

  2. 、あなたの関数をインポートし、settings.py変数に返されたdictの設定:テンプレートコンテキストにこのCONFIG辞書を設定するテンプレートのコンテキストプロセッサを作成 CONFIG = configuration.view.get_config()

  3. を。

    def init_site_settings(request): 
        return settings.CONFIG 
    
  4. あなたTEMPLATE_CONTEXT_PROCESSORS

  5. にこのコンテキストプロセッサを追加します。今、あなたは{{my_config_key}}

としてテンプレートであなたの設定パラメータを自由に使用でき、この情報がお役に立てば幸いです。

0

オプション2の場合、ハードコードされたid = 1はひどいので、get()を直接使用してください。したがって、あなたは使用することができます

get_conf = lambda: model_name.objects.get() 

はまた、そのようなhttp://bitbucket.org/bkroeze/django-livesettings/などの要件のための他のアプリは、あります。あなたはチェックしたいかもしれません。

2

は、はいそれはまだデータベースクエリです)a)は、あなたのマネージャーhttps://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods Bに対応する属性を定義することができ、ID = 1つの表記については、私の同様の質問Changing Django settings at runtime

からhttp://www.djangopackages.com/grids/g/live-setting/ を見てください - チェックアウトhttps://github.com/disqus/django-modeldict/遅延アクセスとキャッシュを使用するアプローチです。

関連する問題