完美解决python flask如何直接加载html,css,js,image等下载的网页模板
Posted arbraham
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完美解决python flask如何直接加载html,css,js,image等下载的网页模板相关的知识,希望对你有一定的参考价值。
python flask如何直接加载下载的网页模板
问题
本人网页开发小白,刚学了用flask,下载了一套网页模板,启动一个网页的确很简单,但是发现无论怎么改这里的 static_folder值都无法找到CSS,JS,IMAGE,FONT等资源
app = Flask(name, static_folder=‘static’, template_folder=‘templates’)
报错如下:
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /css/bootstrap.css HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /css/bar.css HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /css/style.css HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /css/style4.css HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /js/script.js HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /js/simplyCountdown.js HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /css/simplyCountdown.css HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /js/amcharts.js HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /js/bootstrap.min.js HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /images/clone.jpg HTTP/1.1" 404 -
127.0.0.1 - - [04/Mar/2023 22:03:00] "GET /images/profile.jpg HTTP/1.1" 404 -
搜出来的大多数文章都只是说目录要放在static下,或者是要修改html文件里href后面的路径,用url_for之类的。
改目录怎么改都不管用。
最笨的办法就是把html里的href后的路径改了,我也试过,有用,比如把
href=“css/bootstrap.css” 改成 href=“/static/css/bootstrap.css”,一个index.html就有十几处,改了后的确渲染成功了,但是当点击其他链接要打开其他html时又提示找不到。
所以不可能把哪些全都改一遍吧,太费劲了,应该还是flask的参数配置没对,终于参考这篇找到了真正的解决办法。
解决办法
在不改动任何下载的网页模板html情况下,
加上static_url_path=‘’,就可以加载指定的文件夹里的静态文件。我把静态文件也指定到templates里,从而让他们和html文件保持在同一目录,跟下载下来的一样,就可以完美加载所有模板里的资源了。
from flask import Flask, request, render_template
app = Flask(__name__, static_url_path='', static_folder='templates', template_folder='templates')
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('/index.html')
网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?
简单介绍:
说明: 复杂的项目需要配置各种环境,若设置少可直接硬编码,设置多的话可通过加载配置/加载文件/加载变量的方式来设置
app.config.update( DEBUG=True, )
扩展: app.config是flask.config.Config类的实例,继承子PY内置数据结构dict,所以可以使用如上update方法,支持传入多个键值对,其实app.config内置很多配置变量(http://flask.pocoo.org/docs/0.11/config/#Builtin%20Configuration%20Values),而且app.config支持多种更新配置的方式
注意: 不管使用哪种配置方式,配置中的键名称都必须大写,不然不会被识别加载,千万注意~
加载配置:
说明: 支持通过配置文件模块名或导入后的模块对象加载配置
# 方式一: app.config.from_object(‘config‘)传递为字符串参数时则会自动加载根目录下的config.py文件且只会加载文件中变量名为大写的变量
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ from __future__ import absolute_import # 说明: 导入公共模块 # 说明: 导入其它模块 AUTHOR = ‘LIMANMAN‘
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 from flask import Flask # 说明: 导入其它模块 app = Flask(__name__) app.config.from_object(‘config‘) @app.route(‘/‘) def hello_word(): return app.config.get(‘AUTHOR‘) if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=9000)
# 方式二: app.config.from_object(config)传递为对象时则会自动加载该对象,且只会加载对象中属性名为大写的属性,既然是对象那就表示传递类也是可以的.
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ from __future__ import absolute_import # 说明: 导入公共模块 # 说明: 导入其它模块 AUTHOR = ‘LIMANMAN‘
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 import config from flask import Flask # 说明: 导入其它模块 app = Flask(__name__) app.config.from_object(config) @app.route(‘/‘) def hello_word(): return app.config.get(‘AUTHOR‘) if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=9000)
加载文件:
说明: 支持通过文件名加载,且后缀名不限于.py,默认如果文件不存在会抛异常,可使用silent=True设置不抛异常
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ from __future__ import absolute_import # 说明: 导入公共模块 # 说明: 导入其它模块 AUTHOR = ‘LIMANMAN‘
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 from flask import Flask # 说明: 导入其它模块 app = Flask(__name__) app.config.from_pyfile(‘config.py‘, silent=True) @app.route(‘/‘) def hello_word(): return app.config.get(‘AUTHOR‘) if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=9000)
加载变量:
说明: 支持通过环境变量加载,默认如果文件不存在会抛异常,可使用silent=True设置不抛异常
set CONFIG=config.py
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 from flask import Flask # 说明: 导入其它模块 app = Flask(__name__) app.config.from_envvar(‘CONFIG‘, silent=True) @app.route(‘/‘) def hello_word(): return app.config.get(‘AUTHOR‘) or ‘ERROR‘ if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=9000)
注意: 特别是在Windows上set CONFIG=config.py时,千万别手欠把config.py加引号,而且视图函数一定要记得返回一个Response对象,由于None无法生成响应对象,所以一定要确定你返回的不是None
常用方式:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ from __future__ import absolute_import # 说明: 导入公共模块 # 说明: 导入其它模块 # 说明: 配置基类 class __Config(object): AUTHOR = ‘LIMANMAN‘ # 说明: 开发环境 class __DevsConfig(__Config): pass # 说明: 预测环境 class __TestConfig(__Config): pass # 说明: 正式环境 class __ProdConfig(__Config): pass # 说明: 按需加载 config = { ‘default‘: __DevsConfig, ‘develop‘: __TestConfig, ‘testing‘: __ProdConfig, ‘product‘: __ProdConfig, }
说明: 如上是我项目中最常用的方式,在外部加载配置文件时通过from config import config来按需导入开发环境/预测试环境/正式环境不同的配置,通过app.config.from_object(config[‘default‘])来加载配置
本文出自 “@Can Up and No BB...” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1865619
以上是关于完美解决python flask如何直接加载html,css,js,image等下载的网页模板的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 开发 Flask 应用程序时如何自动刷新浏览器?