2012-04-04 80 views
0

我希望能夠從django admin更改一些設置,例如:網站標題或頁腳。我想與包含此設置的模型一起使用應用程序,但此設置應爲單一副本。什麼是最好的辦法呢?django admin中的用戶設置

回答

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 2012-04-04 15:51:00

+0

當然,您可以創建一個模型來存儲您需要的數據,然後創建一個模板標記,以在適當的位置呈現數據。但正如你已經指出這個解決方案,你應該澄清你的確切問題。那麼,在這種情況下又是什麼讓你無法使用第三方應用呢? Flatblocks幾乎可以做你想做的事情,因爲已經有一些人在使用它,所以你可以肯定它考慮到目前你還沒有意識到的問題/方面。至少你可以看看它的來源,爲你自己的解決方案畫一些靈感。 – arie 2012-04-09 12:05:05

相關問題