Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moved templating stuff into a separate module
- Loading branch information
Showing
4 changed files
with
79 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
# -*- coding: utf-8 -*- | ||
""" | ||
flask.templating | ||
~~~~~~~~~~~~~~~~ | ||
Implements the bridge to Jinja2. | ||
:copyright: (c) 2010 by Armin Ronacher. | ||
:license: BSD, see LICENSE for more details. | ||
""" | ||
from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound | ||
|
||
from flask.globals import _request_ctx_stack | ||
|
||
|
||
class _DispatchingJinjaLoader(BaseLoader): | ||
"""A loader that looks for templates in the application and all | ||
the module folders. | ||
""" | ||
|
||
def __init__(self, app): | ||
self.app = app | ||
|
||
def get_source(self, environment, template): | ||
name = template | ||
loader = None | ||
try: | ||
module, name = template.split('/', 1) | ||
loader = self.app.modules[module].jinja_loader | ||
except (ValueError, KeyError): | ||
pass | ||
if loader is None: | ||
loader = self.app.jinja_loader | ||
try: | ||
return loader.get_source(environment, name) | ||
except TemplateNotFound: | ||
# re-raise the exception with the correct fileame here. | ||
# (the one that includes the prefix) | ||
raise TemplateNotFound(template) | ||
|
||
def list_templates(self): | ||
result = self.app.jinja_loader.list_templates() | ||
for name, module in self.app.modules.iteritems(): | ||
if module.jinja_loader is not None: | ||
for template in module.jinja_loader.list_templates(): | ||
result.append('%s/%s' % (name, template)) | ||
return result | ||
|
||
|
||
def render_template(template_name, **context): | ||
"""Renders a template from the template folder with the given | ||
context. | ||
:param template_name: the name of the template to 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 ctx.app.jinja_env.get_template(template_name).render(context) | ||
|
||
|
||
def render_template_string(source, **context): | ||
"""Renders a template from the given template source string | ||
with the given context. | ||
:param template_name: the sourcecode of the template to 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 ctx.app.jinja_env.from_string(source).render(context) |