2016-07-28 25 views
0

我试图使用jinja2_view插件来呈现从自定义错误处理程序模板是这样的:如何在瓶子404处理程序上提供自定义HTML?

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>' 

它的工作,但它不是最佳的选择。

我该如何做这项工作?

回答

1

您可以随时实例自己的神社环境是这样的:

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,它不会被注释,而是在请求中返回。

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') 

所以,如果你的代码更改为这一点,你可以正确加载从神社模板,使用从瓶子神社插件相同的配置。

0

修饰符以相反的顺序应用。在你的代码示例中,你在之后应用了视图装饰器,这意味着未修饰的处理函数被绑定到应用程序并且不呈现模板。你的获取路线也不起作用。只需切换装饰者的顺序:

from bottle import Bottle, abort, jinja2_view as view 

app = Bottle() 

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

@app.error(404) 
@view('404.html') 
def handle404(error): 
    return error 
相关问题