【发布时间】:2012-04-04 14:39:17
【问题描述】:
我希望能够从 django 管理员更改一些设置,例如:站点标题或页脚。我想拥有包含此设置的模型应用程序,但此设置应该是单个副本。最好的方法是什么?
【问题讨论】:
标签: django django-models django-admin
我希望能够从 django 管理员更改一些设置,例如:站点标题或页脚。我想拥有包含此设置的模型应用程序,但此设置应该是单个副本。最好的方法是什么?
【问题讨论】:
标签: django django-models django-admin
您可以使用 @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 等来存储您的配置。您可以定义一些通用后端,并从中继承您的自定义后端,因此它很灵活。
【讨论】:
听起来像django-constance 会很合适。
虽然django-flatblocks 可能就足够了。
django-flatblocks 是一个简单的应用程序,用于处理小型 网站上的文本块。像 django.contrib.flatpages 一样思考它 不是针对整个页面,而是针对其中的一部分,例如 描述您可以在网站上执行的操作的信息文本。
【讨论】: