Bottle 没有正确的静态和错误
Bottle does not statics and errors correctly
我最近从 Flask 切换到 Bottle,我 运行 遇到了一些问题。
- 未路由静态文件
- 服务错误页面
@error
无法正常工作
我的文件树看起来像:
dev
|
|_db
| |_dev.db
|
static
|
|_styles
|
|_js
| |_script.js
|
|
views
|
|_index.tpl
|
|
|_about.tbl
|
|
|_404.tbl
|
application.py
这是我的 application.py
:
# Main application file
# Created by James Parsons 2/23/15
from bottle import error
from bottle import *
from bottle.ext import sqlite
app = Bottle()
db_plugin = sqlite.Plugin(dbfile="./dev/db/dev.db")
app.install(db_plugin)
@route("/static/<filepath:path>")
def server_static(filepath):
# FIXME Bottle is not routing statics correctly
return static_file(filepath, root="/static/")
@error(404)
def error_404():
# FIXME Bottle is not displaying errors correctly
return template("404")
@app.route("/")
def index():
return template("index")
# TODO Work on index page
@app.route("/about")
def about():
return template("about")
# TODO Work on about page
# FUTURE Run on CGI server
run(app, host="localhost", port="80")
script.js
在 /static/js/script.js
中不可用,当我转到不存在的路由时,我没有看到我的自定义错误页面,而是默认的 404 错误。我究竟做错了什么?我该如何解决?
在您的代码中,您没有为静态文件中的 app
对象和 404 错误路由使用修饰器方法。所以
@route
应该是
@app.route
error
.
也一样
您可能还打算从相对路径获取静态文件的根目录
例如
return static_file(filename, root='./static/')
或
return static_file(filename, root='static/')
你让 bottle 在顶级目录中查找 /static/
这是对我有用的完整代码
# Main application file
from bottle import error
from bottle import *
from bottle.ext import sqlite
app = Bottle()
#db_plugin = sqlite.Plugin(dbfile="./dev/db/dev.db")
#app.install(db_plugin)
@app.route('/static/<filename:path>')
def send_static(filename):
return static_file(filename, root='./static/')
@app.error(404)
def error_404(error):
return template("404")
@app.route("/")
def index():
return template("index")
@app.route("/about")
def about():
return template("about")
# FUTURE Run on CGI server
run(app, host="localhost", port="8080")
注意:我禁用了 sqlite 东西,因为它不适用于这个问题,我使用端口值 8080 以避免需要超级用户权限来访问该端口。当你准备好时,你应该把它们改回来。
在 index.tpl
文件中,我引用了 js 脚本,如
<script src="static/js/script.js" ></script>
希望这足以解决您的问题。
我最近从 Flask 切换到 Bottle,我 运行 遇到了一些问题。
- 未路由静态文件
- 服务错误页面
@error
无法正常工作
我的文件树看起来像:
dev
|
|_db
| |_dev.db
|
static
|
|_styles
|
|_js
| |_script.js
|
|
views
|
|_index.tpl
|
|
|_about.tbl
|
|
|_404.tbl
|
application.py
这是我的 application.py
:
# Main application file
# Created by James Parsons 2/23/15
from bottle import error
from bottle import *
from bottle.ext import sqlite
app = Bottle()
db_plugin = sqlite.Plugin(dbfile="./dev/db/dev.db")
app.install(db_plugin)
@route("/static/<filepath:path>")
def server_static(filepath):
# FIXME Bottle is not routing statics correctly
return static_file(filepath, root="/static/")
@error(404)
def error_404():
# FIXME Bottle is not displaying errors correctly
return template("404")
@app.route("/")
def index():
return template("index")
# TODO Work on index page
@app.route("/about")
def about():
return template("about")
# TODO Work on about page
# FUTURE Run on CGI server
run(app, host="localhost", port="80")
script.js
在 /static/js/script.js
中不可用,当我转到不存在的路由时,我没有看到我的自定义错误页面,而是默认的 404 错误。我究竟做错了什么?我该如何解决?
在您的代码中,您没有为静态文件中的 app
对象和 404 错误路由使用修饰器方法。所以
@route
应该是
@app.route
error
.
您可能还打算从相对路径获取静态文件的根目录
例如
return static_file(filename, root='./static/')
或
return static_file(filename, root='static/')
你让 bottle 在顶级目录中查找 /static/
这是对我有用的完整代码
# Main application file
from bottle import error
from bottle import *
from bottle.ext import sqlite
app = Bottle()
#db_plugin = sqlite.Plugin(dbfile="./dev/db/dev.db")
#app.install(db_plugin)
@app.route('/static/<filename:path>')
def send_static(filename):
return static_file(filename, root='./static/')
@app.error(404)
def error_404(error):
return template("404")
@app.route("/")
def index():
return template("index")
@app.route("/about")
def about():
return template("about")
# FUTURE Run on CGI server
run(app, host="localhost", port="8080")
注意:我禁用了 sqlite 东西,因为它不适用于这个问题,我使用端口值 8080 以避免需要超级用户权限来访问该端口。当你准备好时,你应该把它们改回来。
在 index.tpl
文件中,我引用了 js 脚本,如
<script src="static/js/script.js" ></script>
希望这足以解决您的问题。