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 ...
随机推荐
- es之java各种查询操作
matchAllQuery 匹配所有文档 queryStringQuery 基于Lucene的字段检索 wildcardQuery 通配符查询匹配多个字符,?匹配1个字符* termQuery 词条查 ...
- onload in JavaScript
https://www.w3schools.com/tags/ev_onload.asp Example Execute a JavaScript immediately after a page h ...
- jQuery UI Widget Factory
https://learn.jquery.com/jquery-ui/widget-factory/ The jQuery UI Widget Factory is an extensible bas ...
- weui 框架
weui是一个框架,但是官方并没有提供文档: 所以我们需要在github上来通过案例来了解他的用法 一般做列表,左边的图片要么60x60,要么80x80用的比较多 weui是一个小巧的框架,所以带来的 ...
- 部署-GPS授时系统:GPS授时系统
ylbtech-部署-GPS授时系统:GPS授时系统 GPS授时系统是针对自动化系统中的计算机.控制装置等进行校时的高科技产品,GPS授时产品它从GPS卫星上获取标准的时间信号,将这些信息通过各种接口 ...
- flask_sqlalchemy获取动态 model名称 和 动态查询
需求 想要实现动态的查询,表名,字段,字段值都不是固定的 obj=表名.query.filter_by(字段=值1).first() obj.字段=值2 首先动态获取db_model名字(即Role) ...
- Spring学习02——控制反转、依赖注入
有两个人,张三和李四 package com.su.service; public class ZhangSan implements Tester{ public void test(){ Syst ...
- 类StringBuffer
1字符串声明和创建 public StringBuffer() 无参构造函数 public StringBuffer(int capacity) 指定容量的字符串缓冲区对象 public String ...
- VS2013中使用本地IIS+域名调试ASP.NET项目
VS2013中使用本地IIS+域名调试ASP.NET项目 在有些情况下需要使用本地的IIS作为调试服务器,如支持多域名的网站,这里记录下如何使用. 1.修改本机hosts文件. 路径:C:\Windo ...
- Visual Studio新增类模板修改
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class ...