Django 中自定义 Admin 样式与功能的实现方法

时间:2022-04-13 07:31:00

自定义 Admin 样式与功能

1 页面修改中文

 

1.1 语言设置为中文

settings.py

LANGUAGE_CODE = 'zh-hans'

修改结果

Django 中自定义 Admin 样式与功能的实现方法

1.2 应用管理设置为中文

应用/apps.py

  1. from django.apps import AppConfig
  2. class BbssConfig(AppConfig):
  3. name = 'bbs'
  4. # 添加下面这句
  5. verbose_name = 'BBS系统'

修改结果

Django 中自定义 Admin 样式与功能的实现方法

1.3 数据库表设置为中文

应用/models.py

  1. class Comment(models.Model):
  2. topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
  3. comment_text = models.TextField(max_length=2000)
  4. author = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
  5. picture = models.FileField(blank=True, null=True) # 添加文件类型字段,并默认为空
  6. pub_date = models.DateTimeField(auto_now_add=True)
  7. def get_comment_text_md(self):
  8. """将markdown格式转化为html"""
  9. return mark_safe(markdown(self.comment_text))
  10. def __str__(self):
  11. return self.comment_text
  12. class Meta:
  13. verbose_name = '评论' # 单数时显示内容
  14. verbose_name_plural = '评论' # 复数时显示内容

默认数据库表在后台中显示都为复数形式,而中文没有复数形式,因此将两种形式都设置为相同名称

修改结果

Django 中自定义 Admin 样式与功能的实现方法

1.4 数据库表字段名称修改为中文

应用/models.py

  1. class Comment(models.Model):
  2. topic = models.ForeignKey(Topic, on_delete=models.CASCADE, verbose_name='话题')
  3. comment_text = models.TextField('评价内容', max_length=2000)
  4. author = models.ForeignKey(User, default=1, on_delete=models.CASCADE, verbose_name='用户')
  5. picture = models.FileField('图片', blank=True, null=True) # 添加文件类型字段,并默认为空
  6. pub_date = models.DateTimeField('发布时间', auto_now_add=True)
  7.  
  8. def get_comment_text_md(self):
  9. """将markdown格式转化为html"""
  10. return mark_safe(markdown(self.comment_text))
  11.  
  12. def __str__(self):
  13. return self.comment_text
  14.  
  15. class Meta:
  16. verbose_name = '评论' # 单数时显示内容
  17. verbose_name_plural = '评论' # 复数时显示内容

一般的字段只需加个显示名称的位置参数就可以,而一对多关系的要指定关键字参数 verbose_name,并且关键字参数要放在位置参数后面

修改结果

Django 中自定义 Admin 样式与功能的实现方法

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 安装

  1. pip install django-grappelli

2.2 导入项目

settings.py

  1. INSTALLED_APPS = [
  2. 'accounts.apps.AccountsConfig',
  3. 'polls.apps.PollsConfig',
  4. 'bbs.apps.BbssConfig',
  5. 'grappelli',
  6. 'django.contrib.admin',
  7. 'django.contrib.auth',
  8. 'django.contrib.contenttypes',
  9. 'django.contrib.sessions',
  10. 'django.contrib.messages',
  11. 'django.contrib.staticfiles',
  12. ]

2.3 导入URL

项目 / urls.py

  1. urlpatterns = [
  2. path('grappelli', include('grappelli.urls')),
  3. path('admin/', admin.site.urls),
  4. path('', include('bbs.urls')),
  5. path('accounts/', include('accounts.urls')),
  6. ]

2.4 收集静态文件统一放到一个地方

settings.py 中添加

  1. # 收集静态文件统一存放的根路径
  2. STATIC_ROOT = os.path.join(BASE_DIR, 'static-files')

执行命令

  1. python manage.py collectstatic

Django 中自定义 Admin 样式与功能的实现方法

自动生成

Django 中自定义 Admin 样式与功能的实现方法

再次启动服务会发现管理页面已经被修改

Django 中自定义 Admin 样式与功能的实现方法

2.5 自定义标题

settings.py 中添加

  1. # 后台自定义标题
  2. GRAPPELLI_ADMIN_TITLE = 'Z-BBS ADMIN'

刷新页面

Django 中自定义 Admin 样式与功能的实现方法

2.6 admin开启分页功能

应用 / admin.py

  1. from django.contrib import admin
  2.  
  3. # Register your models here.
  4. from .models import Topic, Comment
  5.  
  6. class TopicAdmin(admin.ModelAdmin):
  7. list_display = ('topic_text', 'author', 'pub_date')
  8. search_fields = ('topic_text', 'author')
  9. list_editable = ('author',)
  10. list_per_page = 10
  11.  
  12. class CommentAdmin(admin.ModelAdmin):
  13. list_display = ( 'comment_text', 'author', 'pub_date', 'topic')
  14. search_fields = ('comment_text', 'author')
  15. list_editable = ('author',)
  16. list_per_page = 10

Django 中自定义 Admin 样式与功能的实现方法

2.7 admin 开启过滤功能

应用 / admin.py

  1. class TopicAdmin(admin.ModelAdmin):
  2. list_display = ('topic_text', 'author', 'pub_date')
  3. list_filter = ('topic_text', 'author', 'pub_date')
  4. search_fields = ('topic_text',)
  5. list_editable = ('author',)
  6. list_per_page = 10
  7.  
  8. class CommentAdmin(admin.ModelAdmin):
  9. list_display = ( 'comment_text', 'author', 'pub_date', 'topic')
  10. list_filter = ('comment_text', 'author', 'pub_date', 'topic')
  11. search_fields = ('comment_text',)
  12. list_editable = ('author',)
  13. list_per_page = 10

开启之后记得强制刷新页面(ctrl + shift + r),重新加载 js 和 css 代码

Django 中自定义 Admin 样式与功能的实现方法

总结

以上所述是小编给大家介绍的Django 中自定义 Admin 样式与功能的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!