[toc] 自定義 Admin 樣式與功能 1 頁面修改中文 1.1 語言設置為中文 settings.py 修改結果 1.2 應用管理設置為中文 應用/apps.py 修改結果 1.3 資料庫表設置為中文 應用/models.py 預設資料庫表在後臺中顯示都為複數形式,而中文沒有複數形式,因此將兩 ...
目錄
自定義 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 代碼