当前位置:主页 > 软件编程 > Python代码 >

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

时间:2020-12-28 12:03:51 | 栏目:Python代码 | 点击:

自定义 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 代码

总结

您可能感兴趣的文章:

相关文章