Coverage for /Users/davegaeddert/Development/dropseed/plain/plain/plain/views/templates.py: 56%
32 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-16 22:03 -0500
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-16 22:03 -0500
1from plain.csrf.middleware import get_token
2from plain.exceptions import ImproperlyConfigured
3from plain.runtime import settings
4from plain.templates import Template, TemplateFileMissing
5from plain.utils.functional import lazy
6from plain.utils.html import format_html
7from plain.utils.safestring import SafeString
9from .base import View
12def csrf_input(request):
13 return format_html(
14 '<input type="hidden" name="csrfmiddlewaretoken" value="{}">',
15 get_token(request),
16 )
19csrf_input_lazy = lazy(csrf_input, SafeString, str)
20csrf_token_lazy = lazy(get_token, str)
23class TemplateView(View):
24 """
25 Render a template. Pass keyword arguments from the URLconf to the context.
26 """
28 template_name: str | None = None
30 def get_template_context(self) -> dict:
31 return {
32 "request": self.request,
33 "csrf_input": csrf_input_lazy(self.request),
34 "csrf_token": csrf_token_lazy(self.request),
35 "DEBUG": settings.DEBUG,
36 }
38 def get_template_names(self) -> list[str]:
39 """
40 Return a list of template names to be used for the request. Must return
41 a list. May not be called if render_to_response() is overridden.
42 """
43 if self.template_name is None:
44 raise ImproperlyConfigured(
45 "TemplateView requires either a definition of "
46 "'template_name' or an implementation of 'get_template_names()'"
47 )
48 else:
49 return [self.template_name]
51 def get_template(self) -> Template:
52 template_names = self.get_template_names()
54 for template_name in template_names:
55 try:
56 return Template(template_name)
57 except TemplateFileMissing:
58 pass
60 raise TemplateFileMissing(template_names)
62 def render_template(self) -> str:
63 return self.get_template().render(self.get_template_context())
65 def get(self):
66 return self.render_template()