打包FlaskAdmin程序时关于static路径问题的解决

 更新时间:2021年09月10日 17:34:00   作者:bitQ  
近期写了个基于Flask-admin的数据库管理程序,通过pyinstaller打包,给别人用,经过几次尝试,打包的数据一直找不到static里面的样式文件,查阅资料后,最总把问题搞定了。写下处理流程,供后来人参考

1、pyinstaller的使用

网上资料多,此处省略

2、打包时报错

1、可能有些包没有安装(跑跑程序不缺库就行)

2、有些包pyinstaller找不到?

打包时手动添加

--hidden-importMODULENAME,--hiddenimport MODULENAME

3、添加模板和静态文件

如果你使用的是flask-admin内部的模板,建议将其拷贝到工程对应路径(若不,打包后手动将文件拷贝过来也可以)

1、找到Flask-admin包下的templates、static文件(注意:template下有bootstrapX的多个文件夹,我用的是bootstrap4,字节将该目录下的admin放到工程的templates文件夹)

 

2、工程中放置的文件位置是这样的

3、打包时添加静态文件

用法:

pyinstaller x.py --add-data="源地址;目标地址"。

windows以;分割,linux以:分割

--add-data="admin\static;admin\static" ...

添加好后,spec文件中是这样的,注意,我这里使用了config.py配置文件,也需要作为静态文件打包进去。

4、运行时找不到static中的样式文件

这个问题困扰了我一天,主要原因没有搞清楚Flask的运行原理,Flask-admin用到了Flask的blueprint的东西,这个东西的作用就是将模块进行隔离,比如,admin可以有自己的路由,自己的static、templates存放的位置,具体没有深究,反正对复杂的网站(功能模块多)比较有用。

先上代码:

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="数据库管理", template_mode='bootstrap4', index_view=myView())

代码中,将index_view重新封装了一下,是因为我要设置static_folder这个路径为当前工程中static的路径,测试发现,相对路径不好使,绝对路径好使。

5、再打包,运行,功能正常。

以上就是打包FlaskAdmin程序时关于static路径问题的解决的详细内容,更多关于打包FlaskAdmin程序static的路径的资料请关注脚本之家其它相关文章!

相关文章

  • Python 整行读取文本方法并去掉readlines换行\n操作

    Python 整行读取文本方法并去掉readlines换行\n操作

    这篇文章主要介绍了Python 整行读取文本方法并去掉readlines换行\n操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 使用Python下载Bing图片(代码)

    使用Python下载Bing图片(代码)

    代码另存为py文件,运行图片将自动下载到py文件相同目录,如果觉得每次运行找文件麻烦,可以新建py文件的快捷方式,程序还会自动给下载的图片命名
    2013-11-11
  • python3安装crypto出错及解决方法

    python3安装crypto出错及解决方法

    这篇文章主要介绍了python3安装crypto出错及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Django logging配置及使用详解

    Django logging配置及使用详解

    这篇文章主要介绍了Django logging配置及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python变量的作用域是什么

    python变量的作用域是什么

    在本篇内容里小编给大家分享了关于python变量的作用域的实例及用法,有兴趣的朋友们可以学习下。
    2020-05-05
  • 在python中,使用scatter绘制散点图的实例

    在python中,使用scatter绘制散点图的实例

    今天小编就为大家分享一篇在python中,使用scatter绘制散点图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python简单猜数游戏实例

    python简单猜数游戏实例

    这篇文章主要介绍了python简单猜数游戏,涉及Python随机数及流程控制的相关技巧,需要的朋友可以参考下
    2015-07-07
  • 使用Pandas对数据进行筛选和排序的实现

    使用Pandas对数据进行筛选和排序的实现

    这篇文章主要介绍了使用Pandas对数据进行筛选和排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python 解析xml文件的示例

    Python 解析xml文件的示例

    这篇文章主要介绍了Python 解析xml文件的示例,帮助大家更好的利用python处理文件,感兴趣的朋友可以了解下
    2020-09-09
  • Python实现子类调用父类的方法

    Python实现子类调用父类的方法

    这篇文章主要介绍了Python实现子类调用父类的方法,解决子类覆盖父类初始化方法而出现的不确定问题,可通过调用超类构造方法的未绑定版本或者使用super函数来解决,需要的朋友可以参考下
    2014-11-11

最新评论