2011-02-02 11 views
0

私は、Djangoのサイトを持っている、と私は、サイト全体の設定のカップルできるようしたいと思います:Django:管理者がサイト全体の設定を編集できるようにしますか?

ADMIN_EMAIL - email address for an administrative user 
REMINDER_TEXT - email text for an email that the site will generate once a week 

はadminインタフェースで編集します。

これを行う最も賢明な方法は何ですか?これらの値をsettings.py、またはデータベースのどこかに保存する必要がありますか?

This previous SO question seems to be relatedが、私はそれが今まで十分に答えられないと思います。

ありがとうございます!

答えて

1

各アクセスは、重要なデータ(例えばDBパスワード)を露出することにあるので、理想的には、settings.pyは、非常に稀にしかアクセスされないことがあります。したがって、特別な設定を保存する最適な場所は、データベーステーブルです.2つのカラムテーブルで、設定キーと実際の設定データで十分です。

+1

ありがとうございました。どのようにしてDjango管理者の「新規追加」ボタンを無効にすることができるのか、つまりこれを1つのエントリだけを含むモデルフィールドにするにはどうすればよいでしょうか? – AP257

+0

パーティーに遅れて、私はあなたが今までこれを解決したことを本当に願っています。後継者のために、あなたは " | | |関連するグループまたはユーザーに「」を追加することができます。 – melwil

0

Djangoの管理者は、サイト全体を通じて、いくつかの設定を定義して使用することができますいくつかのアプリケーションは、

dbsettings applicaton...

1

...(私が使用した)これらのようなアプリケーションの一つはdbsettingsです...があります私はdbsettings(github上のそれの新しいフォークだけでなく)を試してみました、そしてそれらは便利です - しかし、私のニーズのために少し重すぎる。代わりに、私はより簡単な方法を実装しました。 JSONField(Postgres 9.3)を使用して作成しましたが、JSONの代わりに文字列を入力する方法を説明するのが簡単なので、TextField(max_length = 1000など)を使用することをお勧めします。

1)まず、(多分コア/ models.pyで)独自の設定モデルを構築:

class Setting(models.Model): 
    """ 
    Model for site-wide settings. 
    """ 
    name = models.CharField(max_length=200, help_text="Name of site-wide variable") 
    value = JSONField(null=True, blank=True, help_text="Value of site-wide variable that scripts can reference - must be valid JSON") 

    def __unicode__(self): 
     return self.name 

2)次に、コア/ admin.pyで管理インターフェイスを()追加:

class SettingAdmin(admin.ModelAdmin): 
    list_display = ['name', 'value'] 

admin.site.register(Setting, SettingAdmin) 

3)移行を構築して実行する:

コア/ contextprocessors.pyでおそらくすべてのリクエストにコードを追加して 'インジェクタ'()

from models import Setting 
import json 

def app_settings(request): 
    """Global values to pass to templates""" 
    settings_dict = dict() 
    settings = dict() 
    for obj in Setting.objects.all(): 
     settings[obj.name] = obj.value 
    settings_dict['settings'] = json.dumps(settings) 
    return settings_dict 
の構築)

<script type="text/javascript"> 
    //Auto-exported site-wide settings 
    {% autoescape off %}var site_settings = {{ settings|safe|default:"{}" }};{% endautoescape %} 
</script> 

5:

python manage.py schemamigration core --auto 
python manage.py migrate core 

4)base.htmlのトップに追加

5)次に、あなたのサイトのsettings.pyにコンテキストプロセッサを追加します。

TEMPLATE_CONTEXT_PROCESSORS = (
    ..., 
    '<yourapp>.core.contextprocessors.app_settings', 
) 

6)ブラウザやクレアを経由して、あなたの管理ページにログインしますTEの設定:

http://yoursite/admin/core/setting/ 
Add a new setting, something like: 
    cell_status_colors 
with a value of: 
    ["green","red"] (note this has to be valid JSON, so use quotes around strings) 

or: 
    daily_header 
with a value of: 
    {"text":"Tomorrow only, free shipping!"} 

7)そして最後に、あなたのJavaScriptファイルのそれぞれは、標準JSを経由してこれらを呼び出すことができる必要があります:

var colors = site_settings.cell_status_colors || ["green","red"]; 
var msg_text = site_settings.daily_header || {"text":""}; 
関連する問題