django-components/sampleproject/components/calendar/calendar.py
Juro Oravec 28b61c1609
refactor: Update docs and tests to use get_template_data() (#1161)
* refactor: update docs and tests to use get_template_data()

* refactor: fix linting

* docs: add note about difference between the two methods
2025-05-03 12:04:10 +02:00

65 lines
2 KiB
Python

from typing import NamedTuple
from django_components import Component, register
@register("calendar")
class Calendar(Component):
# Templates inside `[your apps]/components` dir and `[project root]/components` dir
# will be automatically found.
#
# `template_file` can be relative to dir where `calendar.py` is, or relative to COMPONENTS.dirs
template_file = "calendar/calendar.html"
css_file = "calendar/calendar.css"
js_file = "calendar/calendar.js"
# This component takes one parameter, a date string to show in the template
class Kwargs(NamedTuple):
date: str
def get_template_data(self, args, kwargs: Kwargs, slots, context):
return {
"date": kwargs.date,
}
class View:
def get(self, request, *args, **kwargs):
return Calendar.render_to_response(
request=request,
kwargs={
"date": request.GET.get("date", ""),
},
deps_strategy="append",
)
@register("calendar_relative")
class CalendarRelative(Component):
# Templates inside `[your apps]/components` dir and `[project root]/components` dir
# will be automatically found.
#
# `template_file` can be relative to dir where `calendar.py` is, or relative to COMPONENTS.dirs
template_file = "calendar.html"
css_file = "calendar.css"
js_file = "calendar.js"
# This component takes one parameter, a date string to show in the template
class Kwargs(NamedTuple):
date: str
def get_template_data(self, args, kwargs: Kwargs, slots, context):
return {
"date": kwargs.date,
}
class View:
def get(self, request, *args, **kwargs):
return CalendarRelative.render_to_response(
request=request,
kwargs={
"date": request.GET.get("date", ""),
},
deps_strategy="append",
)