xadmin安装
使用的是django3,所以下载对应版本的xadmin
pip install git+https://github.com/sshwsfc/xadmin.git@django2
配置settings.py
# 添加以下三个app
INSTALLED_APPS = [
'xadmin',
'crispy_forms',
'reversion',
]
配置路由
import xadmin
urlpatterns = [
path(r'xadmin/', xadmin.site.urls)
创建数据库并创建超级管理员
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
同步静态文件
python manage.py collectstatic
如有设置了静态文件目录,同步静态文件到本地需要做一下修改:
# 以下三行代码在同步静态文件时注释
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
MEDIA_URL = '/media/' # 设置文件上传路径,图片上传、文件上传目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 同步静态文件时去掉注释
个性化管理员站点
xadmin要和admin一样可以在后台编辑管理表的数据,需在admin.py的同级目录新建adminx.py文件。
- import xadmin
- admin继承admin.ModelAdmin, xadmin则继承object。
- 只能通过xadmin.site.register(表类名, xxx)方式注册
```python
adminx.py
import xadmin from .models import BlogArticles
class BlogArticlesAdmin(object): list_display = (“title”, “author”, “publish”) list_filter = (“publish”, “author”) search_fields = (“title”, “body”) raw_id_fields = (“author”,) date_hierarchy = “publish” ordering = [“-publish”, ‘author’]
注册BlogArticles表,关联BlogArticlesAdmin
xadmin.site.register(BlogArticles, BlogArticlesAdmin)
<a name="eW4xu"></a>
### xadmin全局配置
```python
import xadmin
from xadmin import views
class BaseSetting(object):
# 支持设置不同主题
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
class GlobalSettings(object):
site_title = '博客后台管理平台' # 设置站点标题
site_footer = 'ZayGee自研' # 设置站点页脚
menu_style = "accordion" # 设置菜单可折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)
效果图如下:
设置应用名称显示为中文
# 应用account下的apps.py文件
from django.apps import AppConfig
class AccountConfig(AppConfig):
name = 'account'
verbose_name = '账号信息'
#应用account下的__init__.py 文件
default_app_config = "account.apps.AccountConfig"
xadmin汉化不完整的解决办法
setttings.py文件配置翻译文件所在目录
LOCALE_PATHS = [os.path.join(BASE_DIR, 'extra_apps', 'xadmin', 'locale')] # 配置翻译文件目录
编译翻译包
django-admin compilemessages
设置语言为中文并开启国际化 ```python LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘UTC’
TIME_ZONE = ‘Asia/Shanghai’
USE_I18N = True
USE_L10N = True
<a name="JH5SR"></a>
#### 添加小组件失败解决
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1170640/1622980305006-823a4b84-5486-4894-bb74-2b59fcb4b5c4.png#clientId=u7a0090f1-048f-4&from=paste&height=268&id=u2de10ce5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=536&originWidth=2202&originalType=binary&ratio=2&size=135944&status=done&style=none&taskId=u510b76bf-c4ad-4037-bdb6-72cd5983843&width=1101)<br />进入文件:xadmin/views/dashboard.py,修改第36行如下:
```python
def render(self, name, value, attrs=None, renderer=None)
自定义菜单项
重写xadmin的CommAdminView类下的get_site_menu方法,并返回一个list。
title: 显示的菜单项
icon: 显示Font Awesome图标,可以在官网上找http://www.fontawesome.com.cn/
menus:多个字典组成的元组 ({},{})
url: self.get_model_url(model, "changelist") # model为具体定义的模型类
# CommAdminView类部分源码如下:
def get_site_menu(self):
return None
@filter_hook
def get_nav_menu(self):
site_menu = list(self.get_site_menu() or [])
had_urls = []
def get_url(menu, had_urls):
if 'url' in menu:
had_urls.append(menu['url'])
if 'menus' in menu:
for m in menu['menus']:
get_url(m, had_urls)
get_url({'menus': site_menu}, had_urls)
nav_menu = OrderedDict()
for model, model_admin in self.admin_site._registry.items():
if getattr(model_admin, 'hidden_menu', False):
continue
app_label = model._meta.app_label
app_icon = None
model_dict = {
'title': smart_text(capfirst(model._meta.verbose_name_plural)),
'url': self.get_model_url(model, "changelist"),
'icon': self.get_model_icon(model),
'perm': self.get_model_perm(model, 'view'),
'order': model_admin.order,
}
在某个应用的adminx.py文件下:
import xadmin
from account.models import UserProfile
from xadmin import views
# 导入需要管理的数据库表
from .models import Moment, Banner, Category, Tag, Recommended, Article, Link, BlogArticles
class BaseSetting(object):
# 支持设置不同主题
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
class GlobalSettings(object):
site_title = '博客后台管理平台' # 设置站点标题
site_footer = 'ZayGee自研' # 设置站点页脚
menu_style = "accordion" # 设置菜单可折叠
def get_site_menu(self):
return [
{
'title': '用户管理',
'icon': 'fa fa-book',
'menus': (
{
'title': '账号设置',
'icon': 'fa fa-bug',
'url': self.get_model_url(UserProfile, 'changelist')
},
)
},
{
'title': '博客管理',
'icon': 'fa fa-book',
'menus': (
{
'title': '博客文章',
'icon': 'fa fa-bug',
'url': self.get_model_url(BlogArticles, 'changelist')
},
{
'title': '文章',
'icon': 'fa fa-bug',
'url': self.get_model_url(Article, 'changelist')
},
{
'title': '记录时刻',
'icon': 'fa fa-bug',
'url': self.get_model_url(Moment, 'changelist')
},
{
'title': '轮播图',
'icon': 'fa fa-bug',
'url': self.get_model_url(Banner, 'changelist')
},
{
'title': '博客分类',
'icon': 'fa fa-bug',
'url': self.get_model_url(Category, 'changelist')
},
{
'title': '文章标签',
'icon': 'fa fa-bug',
'url': self.get_model_url(Tag, 'changelist')
},
{
'title': '推荐位',
'icon': 'fa fa-bug',
'url': self.get_model_url(Recommended, 'changelist')
},
{
'title': '友情链接',
'icon': 'fa fa-bug',
'url': self.get_model_url(Link, 'changelist')
},
)
},
]
xadmin.site.register(views.CommAdminView, GlobalSettings) # 注册