我正在尝试使用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/