diff --git a/aircox/views/episode.py b/aircox/views/episode.py index c3eb910..bde5dcd 100644 --- a/aircox/views/episode.py +++ b/aircox/views/episode.py @@ -1,5 +1,5 @@ from django.contrib.auth.mixins import UserPassesTestMixin -from django.http import HttpResponseRedirect +from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -40,6 +40,17 @@ class EpisodeDetailView(PageDetailView): def get_related_url(self): return reverse("episode-list", kwargs={"parent_slug": self.object.parent.slug}) + def get(self, *args, **kwargs): + """When episode is unpublished and user not authorized, redirect to + parent page.""" + try: + self.object = super().get_object() + except Http404: + episode = get_object_or_404(Episode, slug=self.kwargs["slug"]) + return HttpResponseRedirect(reverse("program-detail", kwargs={"slug": episode.program.slug})) + context = self.get_context_data(object=self.object) + return self.render_to_response(context) + @attach class EpisodeListView(PageListView):