打包FlaskAdmin程序時關(guān)于static路徑問題的解決
1、pyinstaller的使用
網(wǎng)上資料多,此處省略
2、打包時報錯
1、可能有些包沒有安裝(跑跑程序不缺庫就行)
2、有些包pyinstaller找不到?
打包時手動添加
--hidden-importMODULENAME,--hiddenimport MODULENAME
3、添加模板和靜態(tài)文件
如果你使用的是flask-admin內(nèi)部的模板,建議將其拷貝到工程對應路徑(若不,打包后手動將文件拷貝過來也可以)
1、找到Flask-admin包下的templates、static文件(注意:template下有bootstrapX的多個文件夾,我用的是bootstrap4,字節(jié)將該目錄下的admin放到工程的templates文件夾)
2、工程中放置的文件位置是這樣的
3、打包時添加靜態(tài)文件
用法:
pyinstaller x.py --add-data="源地址;目標地址"。
windows以;分割,linux以:分割
--add-data="admin\static;admin\static" ...
添加好后,spec文件中是這樣的,注意,我這里使用了config.py配置文件,也需要作為靜態(tài)文件打包進去。
4、運行時找不到static中的樣式文件
這個問題困擾了我一天,主要原因沒有搞清楚Flask的運行原理,F(xiàn)lask-admin用到了Flask的blueprint的東西,這個東西的作用就是將模塊進行隔離,比如,admin可以有自己的路由,自己的static、templates存放的位置,具體沒有深究,反正對復雜的網(wǎng)站(功能模塊多)比較有用。
先上代碼:
class myView(admin.BaseView): play = PlayBack() def __init__(self, name=None, category=None, endpoint=None, url=None, template='admin/index.html', menu_class_name=None, menu_icon_type=None, menu_icon_value=None): static_path = os.path.join(os.path.dirname(__file__), 'static') print(static_path) super(myView, self).__init__(name or admin.babel.lazy_gettext('Home'), category, endpoint or 'admin', '/admin' if url is None else url, static_path, menu_class_name=menu_class_name, menu_icon_type=menu_icon_type, menu_icon_value=menu_icon_value) self._template = template ... ... admin = admin.Admin(app, name="數(shù)據(jù)庫管理", template_mode='bootstrap4', index_view=myView())
代碼中,將index_view重新封裝了一下,是因為我要設(shè)置static_folder這個路徑為當前工程中static的路徑,測試發(fā)現(xiàn),相對路徑不好使,絕對路徑好使。
5、再打包,運行,功能正常。
以上就是打包FlaskAdmin程序時關(guān)于static路徑問題的解決的詳細內(nèi)容,更多關(guān)于打包FlaskAdmin程序static的路徑的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。