1

我正在尝试使用cherrypy使用Flask进行应用程序调度。文档给出了一个开发服务器的示例,但是当使用cherrypy示例片段并修改url前缀时,页面无法找到静态文件夹。

我的目录结构如下:

cherry
├── app1
│   ├── __init__.py
│   └── app1.py
├── app2
│   ├── __init__.py
│   ├── app2.py
│   ├── static
│   │   └── js.js
│   └── templates
│       └── index.html
└── cherry_app.py

一些相关文件:

##  cherry_app.py
from cherrypy import wsgiserver
from app1.app1 import app as app1
from app2.app2 import app as app2

d = wsgiserver.WSGIPathInfoDispatcher({'/first': app1,
                                       '/second': app2,
                                       })

server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 9999), d)

if __name__ == '__main__':
    try:
        print 'Start at 0.0.0.0:9999'
        server.start()
    except KeyboardInterrupt:
        server.stop()


##  app2.py
from flask import Flask, send_file
import flask

app = Flask(__name__)
@app.route("/")
def root():
    return ("Hello World!\nThis is the second app. Url is %s"
            % flask.url_for('root'))

@app.route("/index")
def index():
    return send_file('templates/index.html')

if __name__ == "__main__":
    app.run()


##  index.html
<script src="/static/js.js"></script>

JS loaded?

##  js.js
alert('Loaded!');

http://0.0.0.0:9999/second/正确地告诉我,Url is /second/当我去的时候,和 javascript 被加载了http://0.0.0.0:9999/second/static/js.js。但是 html 给出了错误GET http://0.0.0.0:9999/static/js.js 404 (Not Found)。即使我更改行,它似乎也不知道/second在查找时使用前缀:/static

app = Flask(__name__, static_url_path='/second/static')

如何让网页正确加载静态文件?最好没有 html 模板(如 jinja)。

4

1 回答 1

2

您是否尝试使用它url_for来定位静态文件?这是 Flask 快速入门中的静态文件部分

所以在你的情况下,修改index.html 中元素的src值:script

<script src="{{ url_for("static", "js.js") }}"></script>

第二个参数js.js应该是静态文件(比如 js.js)到静态文件夹的相对路径。所以如果静态的目录结构看起来像:

static/scripts/js.js

只需替换js.jsscripts/js.js

<script src="{{ url_for("static", "scripts/js.js") }}"></script>

希望这会有意义。

于 2013-10-30T17:02:27.970 回答