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 ...
随机推荐
- [CSP-S模拟测试]:f(Trie树+二分答案+meet in middle+two pointers)
题目传送门(内部题67) 输入格式 第一行,三个整数$n$.$k$.$p$.第二行,$n$个自然数,表示$\{a_i\}$. 输出格式 输出一行,两个自然数,表示$f(res)$.$res$. 样例 ...
- 大数据笔记(十三)——常见的NoSQL数据库之HBase数据库(A)
一.HBase的表结构和体系结构 1.HBase的表结构 把所有的数据存到一张表中.通过牺牲表空间,换取良好的性能. HBase的列以列族的形式存在.每一个列族包括若干列 2.HBase的体系结构 主 ...
- HDU 6592 (LIS+输出字典序最大最小)
题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列. 思路:先正着求一遍LIS,再反着求一遍LIS,然后用单调栈来模拟. 求字典序最小的话,首先找到第一个顶 ...
- 消息队列之 ActiveMQ
简介 ActiveMQ 特点 ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效.可扩展.稳定.安全的企业级消息通信. 它的设计目标是提供标准的.面向消息的.多语言 ...
- ORACLE表空间offline谈起,表空间备份恢复
从ORACLE表空间offline谈起,表空间备份恢复将表空间置为offline,可能的原因包括维护.备份恢复等目的:表空间处于offline状态,那么Oracle不会允许任何对该表空间中对象的SQL ...
- 剑指 Offer——最小的 K 个数
1. 题目 2. 解答 2.1. 方法一--大顶堆 参考 堆和堆排序 以及 堆的应用,我们将数组的前 K 个位置当作一个大顶堆. 首先建堆,也即对堆中 [0, (K-2)/2] 的节点从上往下进行堆化 ...
- 【转】最全的 pip 使用指南,50% 你可能没用过
[转]最全的 pip 使用指南,50% 你可能没用过 所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 P ...
- list数据的存储
1 存储成csv格式 简单方法: a = [3,3,4,4] df = {'a': a} df = pd.DataFrame(df) df.to_csv('./a.csv') 复杂方法: import ...
- 关于Tomcat的浅谈
(今天看到tomcat已经更新到了9.0.24,这是一篇很早之前的文章,由于账号不想用了,所以搬到这里来,另外的账号要注销了) 1.Tomcat的下载 tomcat官网:http://tomcat.a ...
- HttpServletRequest中的request.setAttribute()和request.getSession().setAttribute()
request.setAttribute("num",value):有效范围是一个请求范围,不发送请求的界面无法获取到value的值,jsp界面获取使用EL表达式${num}:re ...