Django——xadmin使用要点

基本使用

1.各个app目录下创建adminx.py
2.创建ModelAdmin

class ModelInline(object):
    model=Model
    extra=0

class Model(object):
    def get_course_lesson_num(self):
        return self.lesson_set.all().count()

    get_course_lesson_num.short_description="章节数"

    def go_to(self):
        from django.utils.safestring import  mark_safe
        return mark_safe("<a href='http://www.ioboom.com/'>跳转</a>")

    go_to.short_description="跳转"

class ModelAdmin(object):
    list_display = ['go_to','get_course_lesson_num'] #显示字段,也可以添加model的方法名
    search_fields = [] #搜索字段
    list_filter = ['lesson__name']  #过滤器字段 外键可以用__取值
    model_icon="fa fa-address-book-o" #设置显示图标
    ordering=['click_nums''']  #默认按字段排序
    readonly_fields=['fav_nums']  #只读字段
    list_editable=['degree','desc']  #直接可以在列表页进行编辑
    refresh_times=[3,5]    #设置页面自动刷新时间
    exclude=['click_nums']   #不显示的字段
    relfield_style='fk-ajax' #作为其他模型的外键字段时异步加载,搜索时才加载
    inlines=[ModelInline] # 一个页面下管理有外键关系的多个模型

    #重载queryset,过滤显示数据
    #可以重新写一个模型(继承即可)进行admin注册,并设置在class Meta:中设置 proxy=True (不生成新表),进行一个模型的分类显示
    def queryset(self):
        qs=super(CourseAdmin,self).queryset()
        return qs.filter(is_banner=False)

    #重载保存方法
    def save_models(self):
        obj=self.new_obj #获取被保存的对象
        obj.save()

3.注册
xadmin.site.register( Model, ModelAdmin)

别名设置

在app目录下的apps.py的中ModelConfig类中添加verbose_name的类变量,设置自定义别名,后台页面的侧边栏菜单就会显示中文

主题设置

使用
from xadmin import views

class BaseSetting(object):
    enable_themes = True  #使用主题
    use_bootswatch = True #使用bootswatch主题

xadmin.site.register(views.BaseAdminView, BaseSetting) #注册
问题

在xadmin使用的过程中,设置“use_bootswatch = True”,企图调出主题菜单,显示更多主题。然而设置了后,发现主题还是默认和bootstrap2,深入跟踪源代码,发现/xadmin/plugins/themes.py下的

block_top_navmenu当use_bootswatch 为True的时候,就会使用httplib2去
http://bootswatch.com/api/3.json网址获取主题菜单项。但是使用浏览器打开这个网址,http会被替换成https的。httplib2访问这个https的网址,就会报错。

这边使用requests库来替代httplib2.
1.安装requests
2.在./xadmin/plugins/themes.py 引入requests
3.修改block_top_navmenu方法:

def block_top_navmenu(self, context, nodes):

        ...
                try:
                    flag = False   #假如为True使用原来的代码,假如为Flase,使用requests库来访问
                    if flag:
                        h = httplib2.Http()
                        resp, content = h.request("http://bootswatch.com/api/3.json", 'GET', '',
                            headers={"Accept": "application/json", "User-Agent": self.request.META['HTTP_USER_AGENT']})
                        if six.PY3:
                            content = content.decode()
                        watch_themes = json.loads(content)['themes']
                    else:
                        content = requests.get("https://bootswatch.com/api/3.json")
                        if six.PY3:
                            content = content.text.decode()
                        watch_themes = json.loads(content.text)['themes']

                    ex_themes.extend([
                        {'name': t['name'], 'description': t['description'],
                            'css': t['cssMin'], 'thumbnail': t['thumbnail']}
                        for t in watch_themes])
                except Exception as e:
                    print(e)

                ...

全局设置

from xadmin import views

class GlobalSettings(object):
    site_title = "慕学后台管理系统" #title
    site_footer = "慕学在线网" #页脚
    menu_style = "accordion"  #折叠菜单

xadmin.site.register(views.CommAdminView, GlobalSettings) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值