如何获得livereload来提供我的js文件?

时间:2017-02-12 08:18:13

标签: python web.py livereload

我将webpy与livereload一起使用,运行良好,我可以对应用程序模块进行更改,并按预期重新加载浏览器页面。但是livereload找不到我的JS文件,我得到了404,当我运行没有livereload的webpy应用程序时,找到了文件,我没有得到404

from livereload import Server

import web

from nestpas.views import *
from nestpas.urls import *
import sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

# web.config.debug = False
web.ctx.debug = False

app = web.application(urls, globals(), autoreload=False)
webapp = app.wsgifunc()

# Setup session storage
db = web.database(dbn='sqlite', db='dev.db')
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store,
    initializer={'login': 0}
)

if __name__ == '__main__':
    # app.run()
    server = Server(webapp)
    server.watch('static/', 'templates/', 'nestpas/')
    server.serve(port=8080, host='localhost')

JS文件存储在静态文件夹中,如webpy所述,但我在终端中看到此错误

[W 170212 09:08:53 wsgi:355] 404 GET /static/js/require.js (::1) 26.46ms
WARNING:tornado.access:404 GET /static/js/require.js (::1) 26.46ms

如果我更改app.py文件以使用app.run()而不是livereload,那么JS文件将按预期提供

127.0.0.1:55534 - - [12/Feb/2017 09:16:15] "HTTP/1.1 GET /static/js/require.js" - 200

更新

添加网址

urls = (
    '/', 'Index',
    '/blog/(.+)/', 'Blog',
    '/login/', 'Login',
    '/logout/', 'Logout',
    '/admin/', 'Admin',
    '/media/', 'Media',
    '/entry/(.+)?', 'Entry'
)

1 个答案:

答案 0 :(得分:0)

web.py有一个快捷方式:如果URL路径以/static/开头,则直接加载文件并将其返回给请求者。 (你已经知道了。)

但是,除非web.py作为简单的HTTPServer运行,否则不会加载快捷方式。当您通过livereload加载它时,您正在使用tornado Web服务器,因此未加载此功能。

不要害怕:你可以加入它。

web/httpserver.pyStaticMiddleware中定义了此功能,因此您可以将其添加到应用程序链中:

if __name__ == '__main__':
    import web.httpserver
    static_plus_webapp = web.httpserver.StaticMiddelware(webapp)
    server = Server(static_plus_webapp)
    server.watch('static/', 'templates/')
    server.serve(port=8080, host='*')

(我没有进行过广泛的测试,但看起来效果很好。)