管理页面(admin site)创建与配置
Django 提供了一套自动生成与配置管理页面的方法,经过一些简单配置就可使用。默认管理页面地址为localhost:8000/admin
1 .按如下命令新建一个管理员,根据交互提示填写相关信息
$ python manage.py createsuperuser
2. 注册model到管理页面,使管理页面能够操控model层
修改app/admin.py文件如下:
from django.contrib import admin
from .models import Question
admin.site.register(Question)
注:一个web app 在setting.py向Django注册后,Django会根据其目录下的admin.py中的model的field产生对应的HTML输入组件(input widget)。
3. 修改model field 显示效果
- 修改显示顺序:
app/admin.py中创建一个类继承admin.ModelAdmin。创建一个List,排列model field名称,用关键字”fiedls”做其引用,Django会根据List的顺序在管理页面上显示。
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
- 创建field分组
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
4. 注册与已添加model有关系的model
比如Choie这个model中有 qeustion = model.ForeignKey(Question),这表明Question与Choice存在一定的关系。
- 独立添加
像上述添加Question model一样直接添加,Choice独立。 - Inline关联添加
Choice不独立,例如下述,每个Question中添加Choice
创建一个继承Inline的类,用关键字”modle”指定添加的model,用关键字”extra”指定添加的数量。
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
Inline类分为两类,其中StackedInline占用屏幕空间较大,TabularInline占用屏幕空间较小。
5. 其他一些管理页面的设置方法
list_display: 同时显示model的各个field信息
list_display=('question_text','pub_date','was_published_recently')
list_filter: 添加过滤器
list_filter=['pub_date']
search_fields: 添加搜索框
search_fields=['question_text']
在继承admin.ModelAdin的类中直接添加即可
6. 修改改管理页面的模板
如果想要给管理页面换一种风格,可修改其模板。默认状态Django使用其源代码目录下ango/contrib/admin/templates下的html文件作为模板,该目录下的所有模板都可以被修改覆盖。修改模板可按如下步骤来做。
1. 新建文件夹templates
Django虽然不限制这个文件夹的位置,但最好根据惯例放在有manage.py的那个目录下。
2. 设置模板路径
修改实际工程目录下的setting.py文件,按如下添加DIRS项
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3. 新建同名html模板修改覆盖
例如:只想要修改管理页面的名称,新建base_stie.html,复制Dango源代码目录下,jango/contrib/admin/templates/base_site.html。在block branding这块直接用想要的名称替换{{ site_header|default:_(‘Django administration’) }}这个整体,例如
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}
版本:
- Python 2.7.9
- Django 1.8.1