2012-04-04 14 views
0

Ich möchte einige Einstellungen von django admin ändern können, zum Beispiel: Website Titel oder Fußzeile. Ich möchte App mit Modell, das diese Einstellungen enthält, aber diese Einstellungen sollten in Einzelkopie sein. Was ist der beste Weg, es zu tun?Benutzereinstellungen in django admin

Antwort

1

Sie können eine Ansicht mit @staff_member_required Dekorateur schaffen, die rendert/spart Form:

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

Verwendung django forms in der Ansicht, und es auf die Vorlage übergeben.

dann in der Vorlage erweitern "admin/base_site.html", so dass Ihr Formular ein Admin-Look and Feel hat. Hier ist eine Beispielvorlage:

{% 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 %} 

Sie können Datenbank, Ini-Dateien, Redis, ... zum Speichern Ihrer Konfiguration verwenden. Sie können ein allgemeines Backend definieren und von ihm benutzerdefinierte Backends erben, damit es flexibel ist.

1

Sounds wie django-constance wäre eine gute Passform.

Obwohl django-flatblocks ausreichend sein könnte.

django-flatblocks ist eine einfache Anwendung für die Handhabung von kleinen Textbausteinen auf Webseiten. Denken Sie darüber nach wie django.contrib.flatpages nur nicht für eine ganze Seite, sondern nur für Teile davon, wie ein Informationstext beschreibt, was Sie auf einer Website tun können.

+0

Ich möchte keine Anwendungen von Drittanbietern verwenden. Kann ich dies ohne Anwendungen von Drittanbietern tun? – Gr1N

+0

Natürlich könnten Sie ein Modell erstellen, das die Daten enthält, die Sie benötigen, und dann ein Vorlagen-Tag erstellen, das die Daten an den entsprechenden Stellen darstellt. Aber wie Sie bereits diese Lösung angegeben haben, sollten Sie wahrscheinlich Ihre genaue Frage/Problem klären. Was hält Sie davon ab, in diesem Fall eine Drittanbieter-App zu verwenden? Flatblocks tun genau das, was Sie wollen, und da es bereits einige Leute gibt, die es benutzen, können Sie sicher sein, dass es Probleme/Aspekte berücksichtigt, die Sie im Moment nicht realisieren. Zumindest könnten Sie sich die Quelle ansehen, um einige Inspirationen für Ihre eigene Lösung zu ziehen. – arie