python - 如何在 Bottle 404处理程序上传递自定义HTML?

标签 python error-handling http-status-code-404 jinja2 bottle

我正在尝试使用jinja2_view插件从这样的自定义错误处理程序呈现模板:

from bottle import Bottle, abort, jinja2_view

app = Bottle()

@jinja2_view('index.html')
@app.get('/')
def index():
    abort(404)

@jinja_view('404.html')
@app.error(404)
def handle404(error):
    return error

但这是行不通的。

我试图从处理程序返回一个字符串,如下所示:
from bottle import Bottle, abort, jinja2_view

app = Bottle()

@jinja2_view('index.html')
@app.get('/')
def index():
    abort(404)


@app.error(404)
def handle404(error):
    return '<h1>Custom code</h1>'

它有效,但是不是首选。

我该如何进行这项工作?

最佳答案

您总是可以像这样实例化自己的Jinja环境:

from bottle import Bottle, abort, jinja2_view
from jinja2 import Environment, PackageLoader

env = Environment(loader=PackageLoader('yourapplication', 'templates'))

app = Bottle()

@jinja2_view('index.html')
@app.get('/')
def index():
    abort(404)


@app.error(404)
def handle404(error):
    template = env.get_template('404.html')
    return template.render()

关于此方法的坏事是丢失了在瓶jinja插件上进行的所有配置,您必须重新配置。

好消息是,瓶中还有另一个名为jinja2_template的jinja插件,该插件不会被注释,但会在请求中返回。
from bottle import Bottle, abort, jinja2_view, jinja2_template

app = Bottle()

@jinja2_view('index.html')
@app.get('/')
def index():
    abort(404)


@app.error(404)
def handle404(error):
    return jinja2_template('404.html')

因此,如果您可以将代码更改为此,则可以使用bottle jinja插件中的相同配置从jinja正确加载模板。

关于python - 如何在 Bottle 404处理程序上传递自定义HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647874/

相关文章:

python - 如何使用 IPython/NumPy 计算 RMSE?

python - 如果语句不读取输入

java - 处理 Selenium 抛出的错误

r - 打印在for循环中引发错误的列表项,并继续下一个列表项

python - 随时间绘制总和

python - 将线段拟合到一组点

vba - VBA图表中的系列公式过长错误

java - 如何检查 URL 是否存在或使用 Java 返回 404?

java - 在 tomcat 上部署 Spring Boot 应用程序时出现 404 错误

ASP.NET 上下文重写路径 404 错误