2012-04-04 26 views
0

djangoの管理者からいくつかの設定を変更したいと思っています。例えば、サイトのタイトルやフッタです。私はこの設定を含むモデルを持つアプリを持っているが、この設定は単一のコピーにする必要があります。何をするのが最善の方法ですか?djangoの管理者のユーザ設定

答えて

1

あなたは/フォームを保存しレンダリング@staff_member_requiredデコレータ、とビューを作成することができますビューで使用django forms

from django.contrib.admin.views.decorators import staff_member_required 
... 
@staff_member_required 
def edit_config(request,): 
    saved = False 
    if request.method == "POST": 
     form = ConfigForm(request.POST) 
     if form.is_valid(): 
      ... 
      # Do saving here 
      saved = True 
    else: 
     form = ConfigForm() 
     ... 
    context = { 
     'form': form, 
     'saved': saved, 
    } 
    return render_to_response('staff/edit_config.html', context, context_instance=RequestContext(request)) 

、およびテンプレートに渡します。

テンプレートで 'admin/base_site.html'を拡張すると、フォームに管理者のルック・アンド・フィールが表示されます。

{% extends 'admin/base_site.html' %} 
{% load i18n adminmedia %} 

{% block title %}Edit Configuration {{ block.super }} {% endblock %} 

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %} 

{% block breadcrumbs %} 
    <div class="breadcrumbs"> 
     <a href="/admin/">{% trans "Home" %}</a> > Edit Configuration 
    </div> 
{% endblock %} 

{% block content %} 
    <h1>Edit Configuration</h1> 
    {% if saved %} 
     <p class="success" style="background-color:#9F9; padding: 10px; border: 1px dotted #999;"> 
      Settings were saved successfully! 
     </p> 
    {% endif %} 
    <form method="POST" action=""> 
     {% csrf_token %} 
     <fieldset class="module aligned"> 
      <h2>Configuration</h2> 
      <div class="description"></div> 
      {% for field in form %} 
       <div class="form-row {% if field.errors %}errors{% endif %}"> 
        {{ field.errors }} 
        <div class="field-box"> 
         {{ field.label }} : {{ field }} 
         {% if field.help_text %} 
          <p class="help">{{ field.help_text|safe }}</p> 
         {% endif %} 
        </div> 
       </div> 
      {% endfor %} 
     </fieldset> 
     <div class="submit-row"> 
      <input type="submit" value="{% trans 'Save' %}" class="default" name="_save"/> 
     </div> 
    </form> 
{% endblock %} 

設定を保存するには、データベース、iniファイル、redis、...を使用できます。いくつかの一般的なバックエンドを定義し、独自のバックエンドを継承して柔軟なものにすることができます。

1

django-constanceのようなサウンドは適切です。

django-flatblocksでも構いません。

django-flatblocksは、ウェブサイトの小さな テキストブロックを処理するための簡単なアプリケーションです。 django.contrib.flatpages のように、ページ全体ではなく、サイト上で何ができるかを説明する 情報テキストのような部分だけを考えてください。

+0

サードパーティアプリケーションを使用したくないです。サードパーティアプリケーションなしでこれを行うことはできますか? – Gr1N

+0

もちろん、必要なデータを保持するモデルを作成し、適切な場所にデータをレンダリングするテンプレートタグを作成することもできます。しかし、すでにこの解決策を示しているので、正確な質問/問題を明確にする必要があります。それでは、この場合、サードパーティのアプリケーションを使用しないようにするにはどうしたらよいでしょうか?フラットブロックはあなたが望むものを大部分は使いますが、すでにそれを使用している人がいるので、あなたは現時点では気づいていない問題や側面を考慮していると確信できます。少なくとも、あなた自身の解決策のためのインスピレーションを引き出すのはソースだと見ることができます。 – arie

関連する問題