from django import template from django.conf import settings register = template.Library() """ Usage: {% setting DEBUG %} or {% setting DATABASES.default.NAME %} # Get the name of the database or {% setting INSTALLED_APPS.2 %} #get the third installed app. or {% setting DEBUG %} """ @register.tag def setting ( parser, token ): try: tag_name, option = token.split_contents() except ValueError: raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents[0] return SettingNode( option ) class SettingNode ( template.Node ): def __init__ ( self, option ): self.option = option def render ( self, context ): # if FAILURE then FAIL silently try: setting = settings # Enables param to tag to be for example "DATABASES.default.ENGINE" for name in self.option.split('.'): # if is an int. get from the setting by index. if name.isdigit(): setting = setting[int(name)] else: if type(setting) == dict: setting = setting.get(name) else: setting = setting.__getattr__(name) return str(setting) except: return ""