Flatpages first pass

This fixes the template loader so that it can load plugin templates.

This adds code for registering template paths so that plugins can add
their own templates.

This adds the base code for the flatpagesfile plugin. It doesn't serve
pages, yet, but it's pretty close.
This commit is contained in:
Will Kahn-Greene
2012-06-10 11:50:14 -04:00
parent 62157a898f
commit 8545dd50f0
7 changed files with 186 additions and 19 deletions

View File

@@ -71,7 +71,8 @@ def setup_database():
return connection, db
def get_jinja_loader(user_template_path=None, current_theme=None):
def get_jinja_loader(user_template_path=None, current_theme=None,
plugin_template_paths=None):
"""
Set up the Jinja template loaders, possibly allowing for user
overridden templates.
@@ -79,26 +80,28 @@ def get_jinja_loader(user_template_path=None, current_theme=None):
(In the future we may have another system for providing theming;
for now this is good enough.)
"""
if user_template_path or current_theme:
loader_choices = []
path_list = []
# user template overrides
if user_template_path:
loader_choices.append(jinja2.FileSystemLoader(user_template_path))
# Add user path first--this takes precedence over everything.
if user_template_path is not None:
path_list.append(jinja2.FileSystemLoader(user_template_path))
# Any theme directories in the registry
if current_theme and current_theme.get('templates_dir'):
loader_choices.append(
jinja2.FileSystemLoader(
current_theme['templates_dir']))
# Any theme directories in the registry
if current_theme and current_theme.get('templates_dir'):
path_list.append(
jinja2.FileSystemLoader(
current_theme['templates_dir']))
# Add the main mediagoblin templates
loader_choices.append(
jinja2.PackageLoader('mediagoblin', 'templates'))
# Add plugin template paths next--takes precedence over
# core templates.
if plugin_template_paths is not None:
path_list.extend((jinja2.FileSystemLoader(path)
for path in plugin_template_paths))
return jinja2.ChoiceLoader(loader_choices)
else:
return jinja2.PackageLoader('mediagoblin', 'templates')
# Add core templates last.
path_list.append(jinja2.PackageLoader('mediagoblin', 'templates'))
return jinja2.ChoiceLoader(path_list)
def get_staticdirector(app_config):