自定义 Admin 样式与功能
1 页面修改中文
1.1 语言设置为中文
settings.py
LANGUAGE_CODE = 'zh-hans'
修改结果
1.2 应用管理设置为中文
应用/apps.py
- from django.apps import AppConfig
- class BbssConfig(AppConfig):
- name = 'bbs'
- # 添加下面这句
- verbose_name = 'BBS系统'
修改结果
1.3 数据库表设置为中文
应用/models.py
- class Comment(models.Model):
- topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
- comment_text = models.TextField(max_length=2000)
- author = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
- picture = models.FileField(blank=True, null=True) # 添加文件类型字段,并默认为空
- pub_date = models.DateTimeField(auto_now_add=True)
- def get_comment_text_md(self):
- """将markdown格式转化为html"""
- return mark_safe(markdown(self.comment_text))
- def __str__(self):
- return self.comment_text
- class Meta:
- verbose_name = '评论' # 单数时显示内容
- verbose_name_plural = '评论' # 复数时显示内容
默认数据库表在后台中显示都为复数形式,而中文没有复数形式,因此将两种形式都设置为相同名称
修改结果
1.4 数据库表字段名称修改为中文
应用/models.py
- class Comment(models.Model):
- topic = models.ForeignKey(Topic, on_delete=models.CASCADE, verbose_name='话题')
- comment_text = models.TextField('评价内容', max_length=2000)
- author = models.ForeignKey(User, default=1, on_delete=models.CASCADE, verbose_name='用户')
- picture = models.FileField('图片', blank=True, null=True) # 添加文件类型字段,并默认为空
- pub_date = models.DateTimeField('发布时间', auto_now_add=True)
- def get_comment_text_md(self):
- """将markdown格式转化为html"""
- return mark_safe(markdown(self.comment_text))
- def __str__(self):
- return self.comment_text
- class Meta:
- verbose_name = '评论' # 单数时显示内容
- verbose_name_plural = '评论' # 复数时显示内容
一般的字段只需加个显示名称的位置参数就可以,而一对多关系的要指定关键字参数 verbose_name
,并且关键字参数要放在位置参数后面
修改结果
2 修改后台样式
使用 django-grappelli 第三方应用进行修改admin样式
GitHub:https://github.com/sehmaschine/django-grappelli
文档:https://django-grappelli.readthedocs.io/en/latest/quickstart.html
其他工具:https://djangopackages.org/grids/g/admin-interface/
2.1 安装
- pip install django-grappelli
2.2 导入项目
settings.py
- INSTALLED_APPS = [
- 'accounts.apps.AccountsConfig',
- 'polls.apps.PollsConfig',
- 'bbs.apps.BbssConfig',
- 'grappelli',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ]
2.3 导入URL
项目 / urls.py
- urlpatterns = [
- path('grappelli', include('grappelli.urls')),
- path('admin/', admin.site.urls),
- path('', include('bbs.urls')),
- path('accounts/', include('accounts.urls')),
- ]
2.4 收集静态文件统一放到一个地方
settings.py 中添加
- # 收集静态文件统一存放的根路径
- STATIC_ROOT = os.path.join(BASE_DIR, 'static-files')
执行命令
- python manage.py collectstatic
自动生成
再次启动服务会发现管理页面已经被修改
2.5 自定义标题
settings.py 中添加
- # 后台自定义标题
- GRAPPELLI_ADMIN_TITLE = 'Z-BBS ADMIN'
刷新页面
2.6 admin开启分页功能
应用 / admin.py
- from django.contrib import admin
- # Register your models here.
- from .models import Topic, Comment
- class TopicAdmin(admin.ModelAdmin):
- list_display = ('topic_text', 'author', 'pub_date')
- search_fields = ('topic_text', 'author')
- list_editable = ('author',)
- list_per_page = 10
- class CommentAdmin(admin.ModelAdmin):
- list_display = ( 'comment_text', 'author', 'pub_date', 'topic')
- search_fields = ('comment_text', 'author')
- list_editable = ('author',)
- list_per_page = 10
2.7 admin 开启过滤功能
应用 / admin.py
- class TopicAdmin(admin.ModelAdmin):
- list_display = ('topic_text', 'author', 'pub_date')
- list_filter = ('topic_text', 'author', 'pub_date')
- search_fields = ('topic_text',)
- list_editable = ('author',)
- list_per_page = 10
- class CommentAdmin(admin.ModelAdmin):
- list_display = ( 'comment_text', 'author', 'pub_date', 'topic')
- list_filter = ('comment_text', 'author', 'pub_date', 'topic')
- search_fields = ('comment_text',)
- list_editable = ('author',)
- list_per_page = 10
开启之后记得强制刷新页面(ctrl + shift + r),重新加载 js 和 css 代码
总结
以上所述是小编给大家介绍的Django 中自定义 Admin 样式与功能的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!