Browse Source

Allow loading template from iterable

pull/409/head
Dmitry Shevchenko 13 years ago
parent
commit
0b3369355d
  1. 8
      flask/templating.py
  2. 19
      flask/testsuite/templating.py

8
flask/templating.py

@ -109,17 +109,19 @@ def _render(template, context, app):
return rv
def render_template(template_name, **context):
def render_template(template_name_or_list, **context):
"""Renders a template from the template folder with the given
context.
:param template_name: the name of the template to be rendered
:param template_name_or_list: the name of the template to be
rendered, or an iterable with template names
the first one existing will be rendered
:param context: the variables that should be available in the
context of the template.
"""
ctx = _request_ctx_stack.top
ctx.app.update_template_context(context)
return _render(ctx.app.jinja_env.get_template(template_name),
return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
context, ctx.app)

19
flask/testsuite/templating.py

@ -178,6 +178,25 @@ class TemplatingTestCase(FlaskTestCase):
self.assert_equal(rv.data, 'Hello Custom World!')
def test_iterable_loader(self):
app = flask.Flask(__name__)
@app.context_processor
def context_processor():
return {'whiskey': 'Jameson'}
@app.route('/')
def index():
return flask.render_template(
['no_template.xml', # should skip this one
'simple_template.html', # should render this
'context_template.html'],
value=23)
rv = app.test_client().get('/')
self.assert_equal(rv.data, '<h1>Jameson</h1>')
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TemplatingTestCase))

Loading…
Cancel
Save