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一下就能找到問題:

如上圖,隨箭頭指示, 代碼執行順序如下:

 1 xadmin/plugins/wizard.py
 2 
 3 from formtools.wizard.storage import get_storage
 4 
 5 formtools/wizard/storage/__init__.py
 6 
 7 from .base import BaseStorage
 8 
 9 formtools/wizard/storage/base.py
10 
11 rom django.core.files.uploadedfile import UploadedFile
12 from django.utils.datastructures import MultiValueDict
13 from django.utils.functional import lazy_property        <============ ! ! !   !
14 from django.utils import six
15 
16 from .exceptions import NoFileStorageConfigured
17 
18 
19 class BaseStorage(object):
20     ...

問題就在 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 中遇到的問題都在上面了,希望能幫到同樣遇到坑的伙計們.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM