打包FlaskAdmin程序时关于static路径问题的解决
作者:bitQ 发布时间:2023-01-11 20:01:26
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、再打包,运行,功能正常。
来源:https://blog.csdn.net/qianshuyuankk/article/details/120127316


猜你喜欢
- lambda函数lambda是什么大家好,今天给大家带来的是有关于Python里面的lambda表达式详细解析。lambda在Python里
- 这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND
- 前言:前两天用Python实现了ftp服务器。在小项目中就用到了反射。因此写个笔记巩固下。反射的定义:检测和修改它本身状态或行为的一种能力(
- 1.概述mysql-monitor MYSQL 监控工具,优化工具,各种工具为一体的java spring boot 项目git地址:htt
- MySQL5.7.21安装与密码设置教程,具体如下官方参考手册1.解压MySQL 5.7.20安装包,如X:\MySQL\mysql-5.7
- 在最古老的JavaScript浏览器里注册事件只能通过内联模式。自从DHTML从根本上改变了你操作页面的方法,事件的注册就必须有扩展性而且要
- 下面是我们插入到这个tuangou表的数据: id web city type 1 拉手网 北京 餐饮美食 2 拉手网 上海 休闲娱乐 3
- Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构。只有两种方式使一个程序在单处理器上实现“同时做不止一件事”。多
- 说明1、ChainMap的主要用例是提供一种有效的方法来管理多个范围或上下文,并处理重复键的访问优先级。2、当有多个存储重复键的字典访问它们
- 如下所示:#!/usr/bin/python2.6 # -*- coding: utf-8 -*- import time cl
- 这篇文章主要介绍了Python统计时间内的并发数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 前言任务描述:当前有一份excel表格数据,里面存在缺失值,需要对缺失的数据到es数据库中进行查找并对其进行把缺失的数据进行补全。excel
- 在pycharm中设置python脚本的文件模板,让文件创建的时候就自动写上一些相关信息:1、进入pycharm的File->sett
- 今天在学习vue的过程中,发现一个有趣的现象。在某一组件下的某一数据通过点击事件被动态修改的时候,对应view中的数据同步的进行了修改,没错
- Axios是一款网络前端请求框架,基本用法如下:1. Axios基本用法:const response = await Axios.crea
- 实际运用中当我用SqliteAdmin以及SQLite Expert Professional 2软件新建Sqlite数据库的时候在ASP.
- 一、PIL库对图像的基本操作1、读取图片PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。from
- 首先,想要实现的功能是递归遍历文件夹,遇到满足条件的文件时,用yield返回该文件的位置。如果不用递归器,可以这样实现:path_list
- 以前没怎么仔细的研究过ajax,只是用到了就直接拿过来用,发现了问题再找解决方法.以下是我在找解决问题的过程中的一点小小的总结. 一.谈Aj
- 本文实例讲述了vue.js使用v-model实现表单元素(input) 双向数据绑定功能。分享给大家供大家参考,具体如下:v-model 一