例如,这个URL:
http://example.com/get_image?type=1
Run Code Online (Sandbox Code Playgroud)
应该返回image/gifMIME类型的响应.我有两个静态.gif图像,
如果type是1,它应该返回ok.gif,否则返回error.gif.如何在烧瓶中做到这一点?
是否有任何聪明的解决方案可以在Flask的应用程序根目录中存储静态文件.robots.txt和sitemap.xml应该在/中找到,所以我的想法是为它们创建路由:
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
response = make_response(open('sitemap.xml').read())
response.headers["Content-type"] = "text/plain"
return response
Run Code Online (Sandbox Code Playgroud)
必须有更方便的东西:)
我正在渲染一个模板,我试图用外部样式表设置样式.文件结构如下.
/app
- app_runner.py
/services
- app.py
/templates
- mainpage.html
/styles
- mainpage.css
Run Code Online (Sandbox Code Playgroud)
mainpage.html看起来像这样
<html>
<head>
<link rel= "stylesheet" type= "text/css" href= "../styles/mainpage.css">
</head>
<body>
<!-- content -->
Run Code Online (Sandbox Code Playgroud)
我的风格都没有应用.是否与html是我正在渲染的模板这一事实有关?python看起来像这样.
return render_template("mainpage.html", variables..)
Run Code Online (Sandbox Code Playgroud)
我知道这很有效,因为我仍然可以渲染模板.但是,当我试图将样式代码从html的"head"标签中的"样式"块移动到外部文件时,所有样式都消失了,留下了一个简单的html页面.有人看到我的文件结构有任何错误吗?
我刚开始使用Flask/Python.我想要实现的是我的HTML中有一个下载按钮,它调用以下函数:
function downloadPlotCSV() {
$.ajax({
url: "/getPlotCSV",
type: "post",
success: function(data) {
dataPlot = JSON.parse(data);
console.log(dataPlot);
}
});
}
Run Code Online (Sandbox Code Playgroud)
不完整的烧瓶代码是:
@app.route('/getPlotCSV', methods = ['POST'])
def plotCSV():
data = open("outputs/Adjacency.csv")
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我找不到下载此csv文件或将其作为JSON字符串返回的方法,因此我可以使用Javascript下载它.知道如何将其作为JSON发送或者通过Flask本身下载它吗?什么是最好的方式?
是否可以为我的本地dev Flask实例添加更多静态路径?我想有一个默认static文件夹,用于存储网站和另一个文件夹的js/css/images文件,例如designs保存我的特定资产.如果存在更好的解决方案,我不想将designs文件夹放在里面static.
我按照如何在Flask中提供静态文件的说明,但仍然无法使其工作.
这是我的项目结构:
Project_path
|
+--app
| |
| +--main.py
+--static
|
+--js
|
+--jquery-1.11.2.min.js
Run Code Online (Sandbox Code Playgroud)
这是main.py:
@app.route('/js/<path:path>')
def serve_static(path):
root_dir = os.path.dirname(os.getcwd())
print(os.path.join(root_dir, 'static', 'js', path))
return app.send_static_file(os.path.join(root_dir, 'static', 'js', path))
Run Code Online (Sandbox Code Playgroud)
这是index.html:
...
<script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
...
Run Code Online (Sandbox Code Playgroud)
而当我访问/,我可以看到在屏幕上打印javascript文件的正确路径
是Project_path/static/js/jquery-1.11.2.min.js.
但是,我还是
127.0.0.1 - - [22/Dec/2014 11:26:30] "GET /js/jquery-1.11.2.min.js HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
编辑
在逐步完成该send_static_file方法之后,我会发现发生了什么.基本上,我不应该使用abspath作为参数,烧瓶有一个判断send_static_file:
if os.path.isabs(filename) or \
filename == '..' or \
filename.startswith('../'):
raise NotFound()
Run Code Online (Sandbox Code Playgroud)
因为filename …
根据Flask自述文件,可以访问蓝图静态文件blueprintname/static.但由于某种原因,它不起作用.
我的蓝图是这样的:
app/frontend/views.py :
frontend = Blueprint('frontend', __name__,
template_folder='templates',
static_folder='static')
@frontend.route('/') etc...
Run Code Online (Sandbox Code Playgroud)app/frontend/js/app.js :我的javascript
当我去的时候abc.com/frontend/static/js/app.js,它只给出了404.
当我按照Flask自述文件获取我的静态文件时:
<script src="{{url_for('frontend.static', filename='js/app.js')}}"></script>
Run Code Online (Sandbox Code Playgroud)
输出是
<script src="/static/js/app.js"></script>
Run Code Online (Sandbox Code Playgroud)
哪个也行不通.我的根app/static/文件夹中没有任何内容.
我无法访问我的蓝图中的任何静态文件!烧瓶读我说它应该工作!
Run Code Online (Sandbox Code Playgroud)admin = Blueprint('admin', __name__, static_folder='static')默认情况下,路径的最右边部分是它在Web上公开的位置.由于该文件夹在此处称为静态,因此它将在蓝图+/static的位置可用.假设蓝图已注册为/ admin,静态文件夹将位于/ admin/static.
我有一个引用这样的静态对象的html文件
<img src="img/snacks.png">
<link href="css/bluestrap.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)
因此浏览器尝试调用此通道并且烧瓶无法执行此操作
http://127.0.0.1:5000/img/snacks.png
Run Code Online (Sandbox Code Playgroud)
跨多个文件有很多这样的引用,因此无法更改引用.我如何从FLASK提供这些静态文件
我已将所有这些静态文件复制到'static'文件夹并尝试了这个
@app.route('/<path:filename>')
def send_file(filename):
return send_from_directory('/static', filename)
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,有没有其他方法可以做到这一点?或者我做错了什么?
我试图传递一个图像的文件名并在模板上呈现它,虽然我传递的实际名称通过它不显示在页面上
@app.route('/', methods=['GET','POST'])
@app.route('/start', methods=['GET','POST'])
def start():
person_to_show = 'tim'
profilepic_filename = os.path.join(people_dir, person_to_show, "img.jpg")
return render_template('start.html',profilepic_filename =profilepic_filename )
Run Code Online (Sandbox Code Playgroud)
例如:profilepic_filename = /data/tim/img.jpg我试过了
{{profilepic_filename}}
<img src="{{ url_for('data', filename='tim/img.jpg') }}"></img>
Run Code Online (Sandbox Code Playgroud)
我也试过了
<img src="{{profilepic_filename}}"></img>
Run Code Online (Sandbox Code Playgroud)
两者都不奏效
我正在尝试使用flask来提供静态文件.我不知道如何使用url_for函数.生成动态内容的所有路由工作正常,我已导入url_for,但是当我有这个代码时:
@app.route('/')
def home():
return url_for('static', filename='hi.html')
Run Code Online (Sandbox Code Playgroud)
随着我的'hi.html'文件(其中有一些基本的html)坐在目录静态中,我加载页面时得到的字面意思是:
/static/hi.html
我只是错误地使用url_for吗?