From 3b47da8eab4ac8b4b580fb95da2d4a3e891e9555 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Thu, 5 Jul 2012 12:23:56 -0500 Subject: [PATCH] Themes are now registered and can have their templates loaded properly --- mediagoblin/app.py | 9 ++++++++- mediagoblin/config_spec.ini | 5 +++++ mediagoblin/init/__init__.py | 24 +++++++++++++++++++----- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/mediagoblin/app.py b/mediagoblin/app.py index 33acbba0..a10edfaa 100644 --- a/mediagoblin/app.py +++ b/mediagoblin/app.py @@ -76,10 +76,17 @@ class MediaGoblinApp(object): # Register themes self.theme_registry = register_themes(app_config) + self.current_theme_name = app_config.get('theme') + if self.current_theme_name \ + and self.theme_registry.has_key(self.current_theme_name): + self.current_theme = self.theme_registry[self.current_theme_name] + else: + self.current_theme = None # Get the template environment self.template_loader = get_jinja_loader( - app_config.get('local_templates')) + app_config.get('local_templates'), + self.current_theme) # Set up storage systems self.public_store, self.queue_store = setup_storage() diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini index ce81b356..7fc5fa70 100644 --- a/mediagoblin/config_spec.ini +++ b/mediagoblin/config_spec.ini @@ -60,6 +60,11 @@ push_urls = string_list(default=list()) exif_visible = boolean(default=False) geolocation_map_visible = boolean(default=False) +# Theming stuff +theme_install_dir = string(default="%(here)s/user_dev/themes/") +theme = string() + + [storage:publicstore] storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage") base_dir = string(default="%(here)s/user_dev/media/public") diff --git a/mediagoblin/init/__init__.py b/mediagoblin/init/__init__.py index 1d8115cb..7a885800 100644 --- a/mediagoblin/init/__init__.py +++ b/mediagoblin/init/__init__.py @@ -71,7 +71,7 @@ def setup_database(): return connection, db -def get_jinja_loader(user_template_path=None): +def get_jinja_loader(user_template_path=None, current_theme=None): """ Set up the Jinja template loaders, possibly allowing for user overridden templates. @@ -79,10 +79,24 @@ def get_jinja_loader(user_template_path=None): (In the future we may have another system for providing theming; for now this is good enough.) """ - if user_template_path: - return jinja2.ChoiceLoader( - [jinja2.FileSystemLoader(user_template_path), - jinja2.PackageLoader('mediagoblin', 'templates')]) + if user_template_path or current_theme: + loader_choices = [] + + # user template overrides + if user_template_path: + loader_choices.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'])) + + # Add the main mediagoblin templates + loader_choices.append( + jinja2.PackageLoader('mediagoblin', 'templates')) + + return jinja2.ChoiceLoader(loader_choices) else: return jinja2.PackageLoader('mediagoblin', 'templates') -- 2.25.1