old_contents: # Copyright (C) 2011 Yaco Sistemas (http://www.yaco.es)
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #            http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  from django import template
  
  from djangosaml2.conf import config_settings_loader
  
  register = template.Library()
  
  
  class IdPListNode(template.Node):
  
      def __init__(self, variable_name):
          self.variable_name = variable_name
          self.conf = config_settings_loader()
  
      def render(self, context):
          context[self.variable_name] = self.conf.get_available_idps()
          return ''
  
  
  @register.tag
  def idplist(parser, token):
      try:
          tag_name, as_part, variable = token.split_contents()
      except ValueError:
          raise template.TemplateSyntaxError(
              '%r tag requires two arguments' % token.contents.split()[0])
      if not as_part == 'as':
          raise template.TemplateSyntaxError(
              '%r tag first argument must be the literal "as"' % tag_name)
  
      return IdPListNode(variable)
  
new_contents: # Copyright (C) 2011 Yaco Sistemas (http://www.yaco.es)
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #            http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  from django import template
  
  from djangosaml2.conf import config_settings_loader
  
  register = template.Library()
  
  
  class IdPListNode(template.Node):
  
      def __init__(self, variable_name):
          self.variable_name = variable_name
  
      def render(self, context):
          conf = config_settings_loader()
          context[self.variable_name] = conf.get_available_idps()
          return ''
  
  
  @register.tag
  def idplist(parser, token):
      try:
          tag_name, as_part, variable = token.split_contents()
      except ValueError:
          raise template.TemplateSyntaxError(
              '%r tag requires two arguments' % token.contents.split()[0])
      if not as_part == 'as':
          raise template.TemplateSyntaxError(
              '%r tag first argument must be the literal "as"' % tag_name)
  
      return IdPListNode(variable)
  
subject: Load the config as late as possible to avoid crashing when the configuration is not ready yet. Also this code is more reentrant