@@ -300,24 +300,31 @@ def clean(self):
300
300
if not self .type :
301
301
raise ValidationError ("Event must specify a type." )
302
302
303
- # def get_url_parts(self, *args, **kwargs):
304
- # """Custom event page URLs of the form /events/2014/03/my-event."""
305
- # url_parts = super().get_url_parts(*args, **kwargs)
306
- # # NOTE evidently this can sometimes be None; unclear why – perhaps it
307
- # # gets called in a context where the request is unavailable? Only
308
- # # happens in QA, not locally.
309
- # if url_parts:
310
- # site_id, root_url, _ = url_parts
311
- # page_path = reverse(
312
- # "events:detail",
313
- # kwargs={
314
- # "year": self.start_time.year,
315
- # # force two-digit month
316
- # "month": "%02d" % self.start_time.month,
317
- # "slug": self.slug,
318
- # },
319
- # )
320
- # return site_id, root_url, page_path
303
+ def get_url_parts (self , request , * args , ** kwargs ):
304
+ """Custom event page URLs of the form /events/2014/03/my-event."""
305
+ url_parts = super ().get_url_parts (request , * args , ** kwargs )
306
+ # NOTE evidently this can sometimes be None; unclear why – perhaps it
307
+ # gets called in a context where the request is unavailable? Only
308
+ # happens in QA, not locally.
309
+ if url_parts :
310
+ site_id , root_url , _remainder = url_parts
311
+ parent = self .get_parent ().specific
312
+
313
+ # If for some reason we don't have a eventlanding-style parent, just
314
+ # use `super()`
315
+ if not hasattr (parent , "reverse_subpage" ):
316
+ return url_parts
317
+
318
+ page_path = parent .reverse_subpage (
319
+ "dated_child" ,
320
+ kwargs = {
321
+ "year" : self .start_time .year ,
322
+ # force two-digit month
323
+ "month" : "%02d" % self .start_time .month ,
324
+ "slug" : self .slug ,
325
+ },
326
+ )
327
+ return site_id , root_url , parent .get_url (request ) + page_path
321
328
322
329
def get_ical_url (self ):
323
330
"""URL to download this event as a .ics (iCal) file."""
@@ -466,7 +473,7 @@ def get_upcoming_events_for_semester(self, semester, year):
466
473
else :
467
474
raise ValueError (f"Invalid semester: { semester } " )
468
475
469
- child_pages = self .get_children ().live ().type (Event )
476
+ child_pages = self .get_children ().live ().specific (). type (Event )
470
477
# Filter events based on start_time within the semester range
471
478
return child_pages .filter (
472
479
event__start_time__gte = start_date , event__start_time__lte = end_date
@@ -475,7 +482,7 @@ def get_upcoming_events_for_semester(self, semester, year):
475
482
def get_upcoming_events (self ):
476
483
current_datetime = timezone .now ()
477
484
478
- child_pages = self .get_children ().live ().type (Event )
485
+ child_pages = self .get_children ().live ().specific (). type (Event )
479
486
480
487
# Fetch upcoming events among the child pages
481
488
return child_pages .filter (event__start_time__gte = current_datetime ).order_by (
0 commit comments