Как добавить дополнительные поля для каждого фида в Django Feed (в частности, в Django-iCal feed)
Я генерирую ленту календаря для каждого пользователя. Как часть URL, я разрешаю фильтры событий. Я пытаюсь понять, как сохранить этот фильтр (или любую произвольную переменную) в конкретном фиде, который я генерирую из конкретного вызова. Метод, который, как я думал, будет работать, заключается в том, чтобы (исходя из мира C++) сделать статическую переменную, которая будет общей для всех вызывающих Feed, что приведет к несогласованности, когда Feed генерируются одновременно.
Как правильно это сделать? Читая библиотеки Feed, я вижу такие методы, как 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
По сути, я пытаюсь каким-то образом получить значения "filter" и "alarms", передаваемые методам items() и item_*(), и не могу понять, как получить разные, независимые значения для каждого доступа к URL. Интуиция подсказывает, что дело в методах *_extra_kwargs(), но как их задать и как получить к ним доступ?