Django 提供了一套自动生成与配置管理页面的方法,经过一些简单配置就可使用。默认管理页面地址为localhost:8000/admin
$ python manage.py createsuperuser
修改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)。
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
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)
比如Choie这个model中有 qeustion = model.ForeignKey(Question),这表明Question与Choice存在一定的关系。
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占用屏幕空间较小。
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的类中直接添加即可
如果想要给管理页面换一种风格,可修改其模板。默认状态Django使用其源代码目录下ango/contrib/admin/templates下的html文件作为模板,该目录下的所有模板都可以被修改覆盖。修改模板可按如下步骤来做。
Django虽然不限制这个文件夹的位置,但最好根据惯例放在有manage.py的那个目录下。
修改实际工程目录下的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',
],
},
},
]
例如:只想要修改管理页面的名称,新建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 Administrationa>h1>
{% endblock %}