xadmin安装

使用的是django3,所以下载对应版本的xadmin

  1. pip install git+https://github.com/sshwsfc/xadmin.git@django2

配置settings.py

  1. # 添加以下三个app
  2. INSTALLED_APPS = [
  3. 'xadmin',
  4. 'crispy_forms',
  5. 'reversion',
  6. ]

配置路由

  1. import xadmin
  2. urlpatterns = [
  3. path(r'xadmin/', xadmin.site.urls)

创建数据库并创建超级管理员

  1. python manage.py makemigrations
  2. python manage.py migrate
  3. python manage.py createsuperuser

同步静态文件

  1. python manage.py collectstatic

如有设置了静态文件目录,同步静态文件到本地需要做一下修改:

  1. # 以下三行代码在同步静态文件时注释
  2. STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
  3. MEDIA_URL = '/media/' # 设置文件上传路径,图片上传、文件上传目录
  4. MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  5. # STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 同步静态文件时去掉注释

个性化管理员站点

xadmin要和admin一样可以在后台编辑管理表的数据,需在admin.py的同级目录新建adminx.py文件。

  1. import xadmin
  2. admin继承admin.ModelAdmin, xadmin则继承object。
  3. 只能通过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)

  1. <a name="eW4xu"></a>
  2. ### xadmin全局配置
  3. ```python
  4. import xadmin
  5. from xadmin import views
  6. class BaseSetting(object):
  7. # 支持设置不同主题
  8. enable_themes = True
  9. use_bootswatch = True
  10. xadmin.site.register(views.BaseAdminView, BaseSetting)
  11. class GlobalSettings(object):
  12. site_title = '博客后台管理平台' # 设置站点标题
  13. site_footer = 'ZayGee自研' # 设置站点页脚
  14. menu_style = "accordion" # 设置菜单可折叠
  15. xadmin.site.register(views.CommAdminView, GlobalSettings)

效果图如下:
image.png

设置应用名称显示为中文

  1. # 应用account下的apps.py文件
  2. from django.apps import AppConfig
  3. class AccountConfig(AppConfig):
  4. name = 'account'
  5. verbose_name = '账号信息'
  6. #应用account下的__init__.py 文件
  7. default_app_config = "account.apps.AccountConfig"

xadmin汉化不完整的解决办法

  1. setttings.py文件配置翻译文件所在目录

    1. LOCALE_PATHS = [os.path.join(BASE_DIR, 'extra_apps', 'xadmin', 'locale')] # 配置翻译文件目录
  2. 编译翻译包

    1. django-admin compilemessages
  3. 设置语言为中文并开启国际化 ```python LANGUAGE_CODE = ‘zh-Hans’

TIME_ZONE = ‘UTC’

TIME_ZONE = ‘Asia/Shanghai’

USE_I18N = True

USE_L10N = True

  1. <a name="JH5SR"></a>
  2. #### 添加小组件失败解决
  3. ![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行如下:
  4. ```python
  5. def render(self, name, value, attrs=None, renderer=None)

image.png


自定义菜单项

重写xadmin的CommAdminView类下的get_site_menu方法,并返回一个list。

  1. title: 显示的菜单项
  2. icon: 显示Font Awesome图标,可以在官网上找http://www.fontawesome.com.cn/
  3. menus:多个字典组成的元组 ({},{})
  4. url: self.get_model_url(model, "changelist") # model为具体定义的模型类
  5. # CommAdminView类部分源码如下:
  6. def get_site_menu(self):
  7. return None
  8. @filter_hook
  9. def get_nav_menu(self):
  10. site_menu = list(self.get_site_menu() or [])
  11. had_urls = []
  12. def get_url(menu, had_urls):
  13. if 'url' in menu:
  14. had_urls.append(menu['url'])
  15. if 'menus' in menu:
  16. for m in menu['menus']:
  17. get_url(m, had_urls)
  18. get_url({'menus': site_menu}, had_urls)
  19. nav_menu = OrderedDict()
  20. for model, model_admin in self.admin_site._registry.items():
  21. if getattr(model_admin, 'hidden_menu', False):
  22. continue
  23. app_label = model._meta.app_label
  24. app_icon = None
  25. model_dict = {
  26. 'title': smart_text(capfirst(model._meta.verbose_name_plural)),
  27. 'url': self.get_model_url(model, "changelist"),
  28. 'icon': self.get_model_icon(model),
  29. 'perm': self.get_model_perm(model, 'view'),
  30. 'order': model_admin.order,
  31. }

在某个应用的adminx.py文件下:

  1. import xadmin
  2. from account.models import UserProfile
  3. from xadmin import views
  4. # 导入需要管理的数据库表
  5. from .models import Moment, Banner, Category, Tag, Recommended, Article, Link, BlogArticles
  6. class BaseSetting(object):
  7. # 支持设置不同主题
  8. enable_themes = True
  9. use_bootswatch = True
  10. xadmin.site.register(views.BaseAdminView, BaseSetting)
  11. class GlobalSettings(object):
  12. site_title = '博客后台管理平台' # 设置站点标题
  13. site_footer = 'ZayGee自研' # 设置站点页脚
  14. menu_style = "accordion" # 设置菜单可折叠
  15. def get_site_menu(self):
  16. return [
  17. {
  18. 'title': '用户管理',
  19. 'icon': 'fa fa-book',
  20. 'menus': (
  21. {
  22. 'title': '账号设置',
  23. 'icon': 'fa fa-bug',
  24. 'url': self.get_model_url(UserProfile, 'changelist')
  25. },
  26. )
  27. },
  28. {
  29. 'title': '博客管理',
  30. 'icon': 'fa fa-book',
  31. 'menus': (
  32. {
  33. 'title': '博客文章',
  34. 'icon': 'fa fa-bug',
  35. 'url': self.get_model_url(BlogArticles, 'changelist')
  36. },
  37. {
  38. 'title': '文章',
  39. 'icon': 'fa fa-bug',
  40. 'url': self.get_model_url(Article, 'changelist')
  41. },
  42. {
  43. 'title': '记录时刻',
  44. 'icon': 'fa fa-bug',
  45. 'url': self.get_model_url(Moment, 'changelist')
  46. },
  47. {
  48. 'title': '轮播图',
  49. 'icon': 'fa fa-bug',
  50. 'url': self.get_model_url(Banner, 'changelist')
  51. },
  52. {
  53. 'title': '博客分类',
  54. 'icon': 'fa fa-bug',
  55. 'url': self.get_model_url(Category, 'changelist')
  56. },
  57. {
  58. 'title': '文章标签',
  59. 'icon': 'fa fa-bug',
  60. 'url': self.get_model_url(Tag, 'changelist')
  61. },
  62. {
  63. 'title': '推荐位',
  64. 'icon': 'fa fa-bug',
  65. 'url': self.get_model_url(Recommended, 'changelist')
  66. },
  67. {
  68. 'title': '友情链接',
  69. 'icon': 'fa fa-bug',
  70. 'url': self.get_model_url(Link, 'changelist')
  71. },
  72. )
  73. },
  74. ]
  75. xadmin.site.register(views.CommAdminView, GlobalSettings) # 注册

效果图如下:
image.png