code: def extract_views_from_urlpatterns(self, urlpatterns, base='', namespace=None):
          
          views = []
          for p in urlpatterns:
              if isinstance(p, (URLPattern, RegexURLPattern)):
                  try:
                      if not p.name:
                          name = p.name
                      elif namespace:
                          name = '{0}:{1}'.format(namespace, p.name)
                      else:
                          name = p.name
                      pattern = describe_pattern(p)
                      views.append((p.callback, base + pattern, name))
                  except ViewDoesNotExist:
                      continue
              elif isinstance(p, (URLResolver, RegexURLResolver)):
                  try:
                      patterns = p.url_patterns
                  except ImportError:
                      continue
                  if namespace and p.namespace:
                      _namespace = '{0}:{1}'.format(namespace, p.namespace)
                  else:
                      _namespace = (p.namespace or namespace)
                  pattern = describe_pattern(p)
                  if isinstance(p, LocaleRegexURLResolver):
                      for language in self.LANGUAGES:
                          with translation.override(language[0]):
                              views.extend(self.extract_views_from_urlpatterns(patterns, base + pattern, namespace=_namespace))
                  else:
                      views.extend(self.extract_views_from_urlpatterns(patterns, base + pattern, namespace=_namespace))
              elif hasattr(p, '_get_callback'):
                  try:
                      views.append((p._get_callback(), base + describe_pattern(p), p.name))
                  except ViewDoesNotExist:
                      continue
              elif hasattr(p, 'url_patterns') or hasattr(p, '_get_url_patterns'):
                  try:
                      patterns = p.url_patterns
                  except ImportError:
                      continue
                  views.extend(self.extract_views_from_urlpatterns(patterns, base + describe_pattern(p), namespace=namespace))
              else:
                  raise TypeError("%s does not appear to be a urlpattern object" % p)
          return views
docs: Return a list of views from a list of urlpatterns.
  
          Each object in the returned list is a three-tuple: (view_func, regex, name)