Django Admin — 后台管理文章
本章你将学会配置 Django Admin,无需写前端代码就能拥有内容管理后台。
Admin 是什么?
Django Admin 是 Django 最强大的内置功能之一:你只需注册模型,它就自动生成一个完整的后台管理系统。
后台提供文章的增删改查、搜索、过滤、分页等功能,无需你自己写任何 CRUD 代码。
创建超级用户
首先需要创建一个管理员账号来登录后台:
(venv) $ python manage.py createsuperuser 用户名:admin 电子邮件地址:admin@runoob.com Password: # 输入密码(不会回显) Password (again): # 重复密码 Superuser created successfully.
启动服务器后访问 http://127.0.0.1:8000/admin/,用刚才创建的账号登录。
(venv) $ python manage.py runserver
注册模型到 Admin
打开 blog/admin.py,注册 Post 和 Category 模型。
实例
from django.contrib import admin
from .models import Category, Post
# 注册分类模型:最简单的注册方式
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
# 列表页显示的列
list_display = ['name', 'slug']
# 注册文章模型:带自定义配置
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
# 列表页显示的列
list_display = ['title', 'category', 'created_at', 'updated_at']
# 右侧过滤栏:按分类和时间过滤
list_filter = ['category', 'created_at']
# 顶部搜索框:按标题和摘要搜索
search_fields = ['title', 'summary']
# 发布时间的层级导航(年 → 月 → 日)
date_hierarchy = 'created_at'
# 每页显示 20 条记录
list_per_page = 20
admin.py 关键配置说明
| 配置项 | 类型 | 作用 |
|---|---|---|
| list_display | 列表 | 指定在列表页显示哪些字段 |
| list_filter | 列表 | 右侧添加过滤侧边栏 |
| search_fields | 列表 | 顶部添加搜索框 |
| date_hierarchy | 字符串 | 按日期层级导航 |
| list_per_page | 数字 | 每页分页数量(默认 100) |
刷新后台页面,点击左侧「文章」,可以看到完整的列表、过滤、搜索功能。
通过 Admin 录入测试数据
点击「增加 文章」按钮,在表单中填入标题、摘要、正文内容。
分类字段会自动从已创建的 Category 中拉取选项(因为设置的是 ForeignKey)。
录入至少 5 篇文章,覆盖不同的分类,方便后续章节展示列表和筛选效果。
Admin 的表单字段顺序与 models.py 中字段的定义顺序一致。如果想调整顺序,可以在 Admin 类中设置
fields = ['title', 'category', ...]显式指定排列。
富文本编辑(可选扩展)
默认的正文输入框是纯文本框,输入 HTML 不太方便。
可以安装 django-summernote 来获得所见即所得的富文本编辑器:
(venv) $ pip install django-summernote
实例
INSTALLED_APPS = [
# ...
'django_summernote', # 注册应用
]
# 支持的文件上传大小限制(可选)
SUMMERNOTE_CONFIG = {
'summernote': {
'width': '100%',
'height': '480',
}
}
然后在 Admin 中将 content 字段改为 Summernote 编辑器:
实例
from django_summernote.admin import SummernoteModelAdmin
@admin.register(Post)
class PostAdmin(SummernoteModelAdmin): # 继承 SummernoteModelAdmin
list_display = ['title', 'category', 'created_at']
list_filter = ['category']
search_fields = ['title', 'summary']
summernote_fields = ['content'] # content 字段使用富文本编辑器
现在编辑文章时,正文区域是一个完整的富文本编辑器,可以排版、插图、调整格式。
django-summernote是可选的。如果不想安装第三方库,继续在纯文本框中写 HTML 也完全可以。本教程后续的代码与是否安装 Summernote 无关。
中文化 Admin 界面
如果在 settings.py 中设置了 LANGUAGE_CODE = 'zh-hans',Admin 界面已经自动切换为中文。
模型定义中的 verbose_name 参数会用于 Admin 表单的字段标签。
本章小结
本章你配置了 Django Admin 后台:创建超级用户、注册模型、配置列表展示/搜索/过滤、可选接入富文本编辑器。
现在你可以在浏览器中直观地管理文章内容,不再需要进 Shell 手动录数据。
