Как добавить дополнительные поля для канала в канал Django (в частности, канал Django-iCal)
Я создаю фид календаря для каждого пользователя. Как часть URL я разрешаю фильтры событий. Я изо всех сил пытаюсь понять, как сохранить этот фильтр (или любую произвольную переменную) в конкретную ленту, которую я генерирую из конкретного вызова. Метод, который, по моему мнению, будет работать, состоит в том, чтобы (исходя из мира C++) создать статическую переменную, которая совместно используется всеми вызывающими потоками, что приведет к несогласованности, когда потоки генерируются одновременно.
Каков правильный способ сделать это? Просматривая библиотеки каналов, я вижу такие методы, как feed_extra_kwargs() и item_extra_kwargs(), но не могу найти примеров или документации по ним, показывающих, как их использовать.
Мой URL:
re_path(r'^ics/(?P<user_id>\d+)/(?P<params>[\w=;]+)/ical.ics$', EventFeed(), name='ics'),
Моя попытка фида:
class EventFeed(ICalFeed):
"""
A simple event calender
"""
product_id = '-//icevite.com//Schedule//EN'
timezone = 'UTC'
file_name = "icevite.ics"
filter = []
alarms = []
def get_object(self, request, user_id, params, *args, **kwargs):
self.filter = []
try:
split = params.split(";")
for s in split:
item = s.split("=")
match item[0]:
case "f":
self.filter = list(item[1])
case "n":
mins = int(item[1])
if mins:
self.alarms.append(mins)
return Player.objects.get(id=user_id)
except:
return None
def items(self, player):
responses = Response.objects.filter(mate__player=player)
if self.filter:
filtered = responses.exclude(response__in=self.filter)
else:
filtered = responses
return filtered.select_related('game', 'game__team').order_by('game__time')
...
def item_valarm(self, item):
alarm_list = list()
for alarm in self.alarms:
valarm = Alarm()
valarm.add('action', 'display')
valarm.add('description', self.item_title(item))
valarm.add('trigger', timedelta(minutes=alarm))
alarm_list.append(valarm)
return alarm_list
Итак, в основном я пытаюсь каким-то образом передать значение «фильтр» и «сигналы тревоги» методам items() и item_*() и не могу понять, как получить разные независимые значения для каждого доступа к URL-адресу. . Моя интуиция говорит, что это те методы *_extra_kwargs(), но как их установить и как получить к ним доступ?