forked from orbit-oss/flask
Added @templated decorator to the patterns.
This commit is contained in:
parent
8d49440d8b
commit
a7266ffb90
1 changed files with 49 additions and 0 deletions
|
|
@ -91,3 +91,52 @@ Here the code::
|
||||||
|
|
||||||
Notice that this assumes an instanciated `cache` object is available, see
|
Notice that this assumes an instanciated `cache` object is available, see
|
||||||
:ref:`caching-pattern` for more information.
|
:ref:`caching-pattern` for more information.
|
||||||
|
|
||||||
|
|
||||||
|
Templating Decorator
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
A common pattern invented by the TurboGears guys a while back is a
|
||||||
|
templating decorator. The idea of that decorator is that you return a
|
||||||
|
dictionary with the values passed to the template from the view function
|
||||||
|
and the template is automatically rendered. With that, the following
|
||||||
|
three examples do exactly the same::
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
return render_template('index.html', value=42)
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
@templated('index.html')
|
||||||
|
def index():
|
||||||
|
return dict(value=42)
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
@templated()
|
||||||
|
def index():
|
||||||
|
return dict(value=42)
|
||||||
|
|
||||||
|
As you can see, if no template name is provided it will use the endpoint
|
||||||
|
of the URL map + ``'.html'``. Otherwise the provided template name is
|
||||||
|
used. When the decorated function returns, the dictionary returned is
|
||||||
|
passed to the template rendering function. If `None` is returned, an
|
||||||
|
empty dictionary is assumed.
|
||||||
|
|
||||||
|
Here the code for that decorator::
|
||||||
|
|
||||||
|
from functools import wraps
|
||||||
|
from flask import request
|
||||||
|
|
||||||
|
def templated(template=None):
|
||||||
|
def decorator(f):
|
||||||
|
@wraps(f)
|
||||||
|
def decorated_function(*args, **kwargs):
|
||||||
|
template_name = template
|
||||||
|
if template_name is None:
|
||||||
|
template_name = request.endpoint + '.html'
|
||||||
|
ctx = f(*args, **kwargs)
|
||||||
|
if ctx is None:
|
||||||
|
ctx = {}
|
||||||
|
return render_template(template_name, **ctx)
|
||||||
|
return decorated_function
|
||||||
|
return decorator
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue