zoukankan      html  css  js  c++  java
  • Django 中自定义 Admin 样式与功能

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

  • 相关阅读:
    洛谷 P4708
    NFLSOJ 1060
    Codeforces 1264D
    Solution -「多校联训」Sample
    Solution -「多校联训」光影交错
    Solution -「LOJ #138」「模板」类欧几里得算法
    Solution -「LOJ #141」回文子串 ||「模板」双向 PAM
    Codeforces Round #700 (Div. 2)
    Codeforces Round #698 (Div. 2) C and D
    「NOI 2021」题解
  • 原文地址:https://www.cnblogs.com/izbw/p/11129895.html
Copyright © 2011-2022 走看看