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 代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM