xadmin后台管理

xadmin的安装

django2.0的安装(源码安装方式):

pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2

3.2.xadmin的设置

 (1)新建Python Package "extra_apps",把源码xadmin文件夹放到extra_apps文件夹下面,此时目录结构如下:

(2)把extra_apps右键mark为Source Root并在settings中加入

sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))

(3)因为我们用源码的xadmin,所以要卸载之前安装的

pip uninstall xadmin

(4)配置路由

把admin改成xadmin

复制代码
# urls.py

from django.urls import path

import xadmin

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
]
复制代码

(5)注册app

把下面两个app注册到settings.py的INSTALLED_APPS中

'xadmin',
'crispy_forms'

(6)重新生成数据库

python manage.py makemigrations

python manage.py migrate

(7)设置成中文

复制代码
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False
复制代码

(8)创建一个管理员用户

python manage.py createsuperuser

现在就可以运行了 

python manage.py runserver 

访问后台:http://127.0.0.1:8000/xadmin

 可以看到成功进入

datetimefield报错问题解决:

当我们点增加用户信息,会报错

可以看到报的是xadmin/widgets中第80行

复制代码
 def render(self, name, value, attrs=None):
        input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('
') if ht != '']
        # return input_html
        return mark_safe('<div class="datetime clearfix"><div class="input-group date bootstrap-datepicker"><span class="input-group-addon"><i class="fa fa-calendar"></i></span>%s'
                         '<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div>'
                         '<div class="input-group time bootstrap-clockpicker"><span class="input-group-addon"><i class="fa fa-clock-o">'
                         '</i></span>%s<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div></div>' % (input_html[0], _(u'Today'), input_html[1], _(u'Now')))
复制代码

上面贴出来的最后一行代码就是widgets.py的第80行代码。

可以看出这句代码是希望用“ ”把input_html里的两个标签拆开,但两个标签之间没有换行,所以没能拆分,导致报错。

input_html[1]就是报错的代码,因为input_html里只有一个元素。

 解决办法:

既然“ ”不能拆分标签,那么就换一种拆分方式,使用“/><”拆分。

原代码:

input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('
') if ht != '']

修改后代码:

input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/><') if ht != '']
input_html[0] = input_html[0] + "/>"
input_html[1] = "<" + input_html[1]

再运行就正常了

原文地址:https://www.cnblogs.com/gyang/p/14040518.html