class_docstr: Load templates from a directory in the file system.
  
  The path can be relative or absolute. Relative paths are relative to
  the current working directory.
  
  .. code-block:: python
  
      loader = FileSystemLoader("templates")
  
  A list of paths can be given. The directories will be searched in
  order, stopping at the first matching template.
  
  .. code-block:: python
  
      loader = FileSystemLoader(["/override/templates", "/default/templates"])
  
  :param searchpath: A path, or list of paths, to the directory that
      contains the templates.
  :param encoding: Use this encoding to read the text from template
      files.
  :param followlinks: Follow symbolic links in the path.
  
  .. versionchanged:: 2.8
      Added the ``followlinks`` parameter.
class_docstr_tok: ["Load","templates","from","a","directory","in","the","file","system",".","The","path","can","be","relative","or","absolute",".","Relative","paths","are","relative","to","the","current","working","directory",".","..","code-block",":",":","python","loader","=","FileSystemLoader","(","``","templates","''",")","A","list","of","paths","can","be","given",".","The","directories","will","be","searched","in","order",",","stopping","at","the","first","matching","template",".","..","code-block",":",":","python","loader","=","FileSystemLoader","(","[","``","\/override\/templates","''",",","``","\/default\/templates","''","]",")",":","param","searchpath",":","A","path",",","or","list","of","paths",",","to","the","directory","that","contains","the","templates",".",":","param","encoding",":","Use","this","encoding","to","read","the","text","from","template","files",".",":","param","followlinks",":","Follow","symbolic","links","in","the","path",".","..","versionchanged",":",":","2.8","Added","the","``","followlinks","``","parameter","."]
code: def get_source(
      self, environment: "Environment", template: str
  ) -> t.Tuple[str, str, t.Callable[[], bool]]:
      pieces = split_template_path(template)
      for searchpath in self.searchpath:
          # Use posixpath even on Windows to avoid "drive:" or UNC
          # segments breaking out of the search directory.
          filename = posixpath.join(searchpath, *pieces)
          f = open_if_exists(filename)
          if f is None:
              continue
          try:
              contents = f.read().decode(self.encoding)
          finally:
              f.close()
  
          mtime = os.path.getmtime(filename)
  
          def uptodate() -> bool:
              try:
                  return os.path.getmtime(filename) == mtime
              except OSError:
                  return False
  
          # Use normpath to convert Windows altsep to sep.
          return contents, os.path.normpath(filename), uptodate
      raise TemplateNotFound(template)
  
imports: import importlib.util
  import os
  import posixpath
  import sys
  import pkgutil
  import typing
  import weakref
  import zipimport
  from collections import abc
  from hashlib import sha1
  from importlib import import_module
  from types import ModuleType
  from .exceptions import TemplateNotFound
  from .utils import internalcode
  from .utils import open_if_exists
  import __res
label_desc: Use image node_id 2 for calling the FileSystemLoader obj's underlying member method code with example usage: obj.get_source(environment, template) and returns: contents,  os,  uptodate, unknown, False