I found myself creating a number of simple custom context processors which simply return custom settings that I have added to my Django settings module (I actually keep these custom settings in my_settings.py and import then into settings.py, just to keep them separate). I decided it was a good idea to add exception handling to these functions so that I would get a useful error message if I tried to use a particular context processor without implementing its required setting(s). So, after some refactoring, I came up with this:
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
class SettingsContextProcessor(object):
"""
Class for creating simple context processors that
return one or more Django settings.
"""
def __init__(self, *setting_names):
self.setting_names = setting_names
def __call__(self, request):
extra_context = {}
for sn in self.setting_names:
try:
extra_context[sn] = getattr(settings, sn)
except AttributeError, e:
raise ImproperlyConfigured('Missing required setting: %s' % sn)
return extra_context
Now I can create custom settings-based context processors like this:
google_analytics = SettingsContextProcessor('GOOGLE_ANALYTICS_PROFILE_ID')
jquery = SettingsContextProcessor('JQUERY_VERSION')
jqueryui = SettingsContextProcessor('JQUERYUI_VERSION')
static_media = SettingsContextProcessor('STATIC_MEDIA_URL')
yui = SettingsContextProcessor('YUI_VERSION')
Great idea but for those of us new to Django it would be nice to have a little more detail.
Comment by Mark Stahler — October 5, 2009 @ 8:25 pm