def__init__(self,directory:str|PathLike[typing.AnyStr]|typing.Sequence[str|PathLike[typing.AnyStr]]|None=None,*,context_processors:list[typing.Callable[[Request],dict[str,typing.Any]]]|None=None,env:jinja2.Environment|None=None,**env_options:typing.Any,)->None:ifenv_options:warnings.warn("Extra environment options are deprecated. Use a preconfigured jinja2.Environment instead.",# noqa: E501DeprecationWarning,)assertjinja2isnotNone,"jinja2 must be installed to use Jinja2Templates"assertdirectoryorenv,"either 'directory' or 'env' arguments must be passed"self.context_processors=context_processorsor[]ifdirectoryisnotNone:self.env=self._create_env(directory,**env_options)elifenvisnotNone:self.env=envself._setup_env_defaults(self.env)
defTemplateResponse(self,*args:typing.Any,**kwargs:typing.Any)->_TemplateResponse:ifargs:ifisinstance(args[0],str):# the first argument is template name (old style)warnings.warn("The `name` is not the first parameter anymore. ""The first parameter should be the `Request` instance.\n"'Replace `TemplateResponse(name, {"request": request})` by `TemplateResponse(request, name)`.',# noqa: E501DeprecationWarning,)name=args[0]context=args[1]iflen(args)>1elsekwargs.get("context",{})status_code=(args[2]iflen(args)>2elsekwargs.get("status_code",200))headers=args[2]iflen(args)>2elsekwargs.get("headers")media_type=args[3]iflen(args)>3elsekwargs.get("media_type")background=args[4]iflen(args)>4elsekwargs.get("background")if"request"notincontext:raiseValueError('context must include a "request" key')request=context["request"]else:# the first argument is a request instance (new style)request=args[0]name=args[1]iflen(args)>1elsekwargs["name"]context=args[2]iflen(args)>2elsekwargs.get("context",{})status_code=(args[3]iflen(args)>3elsekwargs.get("status_code",200))headers=args[4]iflen(args)>4elsekwargs.get("headers")media_type=args[5]iflen(args)>5elsekwargs.get("media_type")background=args[6]iflen(args)>6elsekwargs.get("background")else:# all arguments are kwargsif"request"notinkwargs:warnings.warn("The `TemplateResponse` now requires the `request` argument.\n"'Replace `TemplateResponse(name, {"context": context})` by `TemplateResponse(request, name)`.',# noqa: E501DeprecationWarning,)if"request"notinkwargs.get("context",{}):raiseValueError('context must include a "request" key')context=kwargs.get("context",{})request=kwargs.get("request",context.get("request"))name=typing.cast(str,kwargs["name"])status_code=kwargs.get("status_code",200)headers=kwargs.get("headers")media_type=kwargs.get("media_type")background=kwargs.get("background")context.setdefault("request",request)forcontext_processorinself.context_processors:context.update(context_processor(request))template=self.get_template(name)return_TemplateResponse(template,context,status_code=status_code,headers=headers,media_type=media_type,background=background,)