python3 使用 django-xadmin 遇到的许多坑
几乎所有公司项目都是python2的, xadmin对Python2 很友好,对Python3 很不友好, 所以在Python3 环境下使用xadmin遇到了许多意想不到的坑,在这里记录并分享一下:
第一个:Python版本差异引起的坑
报错 reload() 没有被定义
原因是Python3中reload()函数被封装进了imp / importlib 库里, 凡是通过pip install xadmin 方式安装的xadmin源代码都没有处理这一块,最后在xadmin 的github页面上找到了这个未更新的版本,没办法只好将源码下下来,放在项目里,更奇特的是, pip下载的版本是0.6.1, github上的版本是0.6.0, 新版本居然把上一个版本的修复又给遗漏了!!!!我怀疑是作者处理代码的时候把这一小点给忘了.
如图,是处理了该Python版本差异的代码,如果你也遇到了这个问题,打开对应的源码,会发现你的代码是这样的:
一眼就看出差别了吧,作者的意图是为了处理Python2的编码问题,新的代码在Python2环境下会设置环境默认编码,Python3环境就不作处理了.
解决方式也很粗暴,guthub上克隆一个xadmin 项目, 把 xadmin 文件夹放进你的项目的app目录里,比如我的位置是:
随后的常规流程就是把根目录的路由文件的xadmin的引用位置和settings文件都改成 apps.xadmin就好了.
正常到这里的话,你的项目还是不能正常使用 ! ! !
第二个问题: TemplateSyntaxError at /xadmin/ ‘crispy_forms_tags’ is not a registered tag library
出错位置很多,举一个例子, 在 xadmin/templates/xadmin/views/login.html 中,会看到一处报错位置:
原因是环境中找不到该模块, 需要在settings中注册该模块:
第三个问题: bootstrap3/errors.html 提示找不到这个文件
这是在登录页面时遇到的,代码如下:
我看了xadmin的其他几个版本,都没有这个文件,但是好像我们公司python2的xadmin没有报这个错误,而且找了下Python2项目的代码,确实么有这个文件,为啥不报错,暂时还不清楚.这个文件是用来处理一些错误信息的.
注掉就好了,带来的问题是,登录xadmin后台时如果密码错误,那么就不会出现红色的报错信息,就是密码错误这种.
第四个问题: formtools , 报错 No module named 'django.contrib.formtools'
出错位置如下:
其实出错的位置也不是这里,是在另一个地方,下面会贴图.
出错原因也挺坑的,是xadmin作者给的坑.
如图,guthub上给的依赖包里面 django-formtools 的版本是1.0.
但是问题就出在这个版本上,下面是代码:出错的位置还比较婉转,但从报错信息上看不出什么问题,debug一下就能找到问题:
如上图,随箭头指示, 代码执行顺序如下:
xadmin/plugins/wizard.py from formtools.wizard.storage import get_storage formtools/wizard/storage/__init__.py from .base import BaseStorage formtools/wizard/storage/base.py rom django.core.files.uploadedfile import UploadedFile
from django.utils.datastructures import MultiValueDict
from django.utils.functional import lazy_property <============ ! ! ! !
from django.utils import six from .exceptions import NoFileStorageConfigured class BaseStorage(object):
...
问题就在 from django.utils.functional import lazy_property 的位置
旧版本的django 在这个包 django.utils.functional 里面是有lazy_property 的, 但是 django1.11新版本是没有这个类的, 所以这就会导致上面的错误
解决办法就是安装新版本 django-formtools
在新版本django-formtools中,相关代码变成了这样:
如上图: from django.utils.functional import lazy_property 这句就不存在了, 也就不会报错了.
遇到的最后一个问题是个特别低级的问题,就是xadmin的图表插件的问题, 老项目里面都没用过图表,所以第一次用也不知道咋用,网上搜了下,被友好的网友无意间坑了一下.
如果你的图表不显示的话,检查下你的代码,
Model OptionClass 里面的图表配置关键字是 data_charts, 我给写成 data_chats 了, 少了个r (这种问题最头疼,因为你很难看出问题)
目前为止在python3 + django1.11 + xadmin 中遇到的问题都在上面了,希望能帮到同样遇到坑的伙计们.
python3 使用 django-xadmin 遇到的许多坑的更多相关文章
- 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1
第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...
- Python升级3.6 强力Django+Xadmin打造在线教育平台
第 1 章 课程介绍 1-1 项目演示和课程介绍: 第 2 章 Windows下搭建开发环境 2-1 Pycharm.Navicat和Python解释器的安装: Pycharmhttp://www.j ...
- Django+xadmin打造在线教育平台(二)
三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...
- Django+xadmin打造在线教育平台(三)
五.完成注册.找回密码和激活验证码功能 5.1.用户注册 register.html拷贝到templates目录 (1)users/views.py class RegisterView(View): ...
- Django+xadmin打造在线教育平台(一)
目录 在线教育平台(一) 在线教育平台(二) 在线教育平台(三) 在线教育平台(四) 在线教育平台(五) 在线教育平台(六) 在线教育平台(七) 在线教育平台( ...
- Django xadmin引入DjangoUeditor
Django xadmin引入DjangoUeditor 版本:python3.6.1,Django1.11.1 DjangoUeditor下载地址:https://github.com/twz915 ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
- 第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置
第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置 1.Linux安装配置 注意事项: 虚拟机网卡桥接模式 不要拨VPN 如果,网络怎么都 ...
- Django xadmin后台添加富文本编辑器UEditor的用法
效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...
- Django xadmin的使用 (一)
Django xadmin的使用 xadmin是django的一个第三方的管理后台实现,它的功能比自带的admin功能更加强大. xadmin项目在github上的地址为:https://githu ...
随机推荐
- 文档流&文字&CSS常用命令
文档流 文档流就是文档内元素流动方向 流动方向 内联元素从左往右流,宽度不够,之字形,且元素会被截断 块元素从上往下流动,一排一排 注意事项 内联元素中有英文单词,流动时宽度不够,英文单词会整体迁移, ...
- 如何将一个SpringBoot简便地打成一个war包(亲测有效)
正常情况下SpringBoot项目是以jar包的形式,通过命令行: 来运行的,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服务器.正因如此,也出现了一个问 ...
- datatbales的数据源类型(Data source types)
数据是复杂的,并且所有的数据是不一样的.因此 DataTables 中有很多的选项可用于配置如何获得表中的数据显示,以及如何处理这些复杂的数据. 本节将讨论 DataTables 处理数据的三个核心概 ...
- Linux内核调试方法总结之backtrace
backtrace [用途]用户态或者内核态程序异常退出时回溯堆栈信息 [原理]通过对当前堆栈的分析,回溯上层函数在当前栈中的帧地址,直至顶层函数.帧地址是指在栈中存在局部变量.上一级函数返回地址.寄 ...
- iOS即时通讯之CocoaAsyncSocket源码解析五
接上篇:iOS即时通讯之CocoaAsyncSocket源码解析四 原文 前言: 本文为CocoaAsyncSocket Read篇终,将重点涉及该框架是如何利用缓冲区对数据进行读取. ...
- (转)datagridview 自定义列三步走
本文转载自:http://blog.csdn.net/zx13525079024/article/details/4814642 我们如果想自定义实现datagridview的某列,例如是datagr ...
- VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
目录 目录 软件环境 前言 Openstack 接口驱动 使用 KVM 在 Compute Node 上创建虚拟机的流程 使用 VCDirver 在 vCenter 上创建虚拟机的流程 配置 vCen ...
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_1_并发与并行
并发,相当于 一个人吃两个馒头,吃一口这个再吃一口另外一个.这里是cpu一会执行任务1,一会又执行任务2 并行,相当于两个人 吃两个馒头,各自吃各自的,这样速度就会快
- Flink流式引擎技术分析--大纲
Flink简介 Flink组件栈 Flink特性 流处理特性 API支持 Libraries支持 整合支持 Flink概念 Stream.Transformation.Operator Paralle ...
- 数组的includes方法
Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似.该方法属于 ES7 ,但 Babel 转码器已经支持. [1, 2 ...