2012-04-04 3 views
0

Я хочу, чтобы иметь возможность изменять некоторые параметры из администратора django, например: название сайта или нижний колонтитул. Я хочу иметь приложение с моделью, которая включает эти настройки, но эти настройки должны быть в одной копии. Какой лучший способ сделать это?Пользовательские настройки в администраторе django

ответ

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 forms в представлении, и передать его в шаблон.

Затем в шаблоне добавьте '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

Конечно, вы можете создать модель, в которой содержатся нужные вам данные, а затем создать тег шаблона, который отображает данные в соответствующих местах. Но, как вы уже указали это решение, вы, вероятно, должны уточнить свой точный вопрос/проблему. Опять же, что удерживает вас от использования стороннего приложения в этом случае? Flatblocks в значительной степени делает то, что вы хотите, и поскольку уже есть некоторые люди, использующие его, вы можете быть уверены, что он рассматривает проблемы/аспекты, которые вы не понимаете на данный момент. По крайней мере, вы могли бы взглянуть на источник, который вдохновил ваше собственное решение. – arie

Смежные вопросы