0

django adminからいくつかの設定を変更できるようにしたいのですが、たとえば、サイトのタイトルやフッターなどです。この設定を含むモデルのアプリが欲しいのですが、この設定はシングルコピーである必要があります。それを行うための最良の方法は何ですか?

4

2 に答える 2

1

django-constanceのように聞こえます。

django-flatblocksで十分かもしれませんが。

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

于 2012-04-04T15:08:10.287 に答える
1

@staff_member_requiredデコレータを使用してビューを作成できます。これにより、フォームがレンダリング/保存されます。

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))

ビューでdjangoフォームを使用して、テンプレートに渡します。

次に、テンプレートで「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、...を使用して構成を保存できます。一般的なバックエンドを定義し、そこからカスタムバックエンドを継承して、柔軟性を持たせることができます。

于 2012-04-04T19:25:00.897 に答える