add pdocasts
This commit is contained in:
parent
ed9affbef6
commit
712ab223ba
32
aircox/migrations/0016_alter_staticpage_attach_to.py
Normal file
32
aircox/migrations/0016_alter_staticpage_attach_to.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Generated by Django 4.2.1 on 2023-11-28 01:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("aircox", "0015_alter_schedule_timezone_alter_staticpage_attach_to"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="staticpage",
|
||||||
|
name="attach_to",
|
||||||
|
field=models.SmallIntegerField(
|
||||||
|
blank=True,
|
||||||
|
choices=[
|
||||||
|
(0, "Home page"),
|
||||||
|
(1, "Diffusions page"),
|
||||||
|
(2, "Logs page"),
|
||||||
|
(3, "Programs list"),
|
||||||
|
(4, "Episodes list"),
|
||||||
|
(5, "Articles list"),
|
||||||
|
(6, "Publications list"),
|
||||||
|
(7, "Podcasts list"),
|
||||||
|
],
|
||||||
|
help_text="display this page content to related element",
|
||||||
|
null=True,
|
||||||
|
verbose_name="attach to",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -246,6 +246,7 @@ class StaticPage(BasePage):
|
||||||
ATTACH_TO_EPISODES = 0x04
|
ATTACH_TO_EPISODES = 0x04
|
||||||
ATTACH_TO_ARTICLES = 0x05
|
ATTACH_TO_ARTICLES = 0x05
|
||||||
ATTACH_TO_PAGES = 0x06
|
ATTACH_TO_PAGES = 0x06
|
||||||
|
ATTACH_TO_PODCASTS = 0x07
|
||||||
|
|
||||||
ATTACH_TO_CHOICES = (
|
ATTACH_TO_CHOICES = (
|
||||||
(ATTACH_TO_HOME, _("Home page")),
|
(ATTACH_TO_HOME, _("Home page")),
|
||||||
|
@ -255,6 +256,7 @@ class StaticPage(BasePage):
|
||||||
(ATTACH_TO_EPISODES, _("Episodes list")),
|
(ATTACH_TO_EPISODES, _("Episodes list")),
|
||||||
(ATTACH_TO_ARTICLES, _("Articles list")),
|
(ATTACH_TO_ARTICLES, _("Articles list")),
|
||||||
(ATTACH_TO_PAGES, _("Publications list")),
|
(ATTACH_TO_PAGES, _("Publications list")),
|
||||||
|
(ATTACH_TO_PODCASTS, _("Podcasts list")),
|
||||||
)
|
)
|
||||||
VIEWS = {
|
VIEWS = {
|
||||||
ATTACH_TO_HOME: "home",
|
ATTACH_TO_HOME: "home",
|
||||||
|
|
|
@ -48,6 +48,26 @@
|
||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if last_podcasts %}
|
||||||
|
<section class="container">
|
||||||
|
<h2 class="title is-3 p-2">{% translate "Last podcasts" %}</h2>
|
||||||
|
|
||||||
|
<a-carousel>
|
||||||
|
{% for object in last_podcasts %}
|
||||||
|
{% page_widget "card" object open=True %}
|
||||||
|
{% endfor %}
|
||||||
|
</a-carousel>
|
||||||
|
|
||||||
|
<nav class="nav-urls">
|
||||||
|
<a href="{% url "episode-list" %}?podcast=true"
|
||||||
|
aria-label="{% translate "Show all podcasts" %}">
|
||||||
|
{% translate "All podcasts" %}
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if last_publications %}
|
{% if last_publications %}
|
||||||
<section class="container">
|
<section class="container">
|
||||||
<h2 class="title is-3 p-2">{% translate "Last publications" %}</h2>
|
<h2 class="title is-3 p-2">{% translate "Last publications" %}</h2>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<section class="container">
|
<section class="container">
|
||||||
<h3 class="title is-3">{% translate "Last Episodes" %}</h3>
|
<h3 class="title is-3">{% translate "Last Episodes" %}</h3>
|
||||||
<a-carousel section-class="card-grid">
|
<a-carousel section-class="card-grid">
|
||||||
{% for object in episodes|slice:":3" %}
|
{% for object in episodes %}
|
||||||
{% page_widget "card" object %}
|
{% page_widget "card" object %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</a-carousel>
|
</a-carousel>
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<h3 class="title is-3">{% translate "Last Articles" %}</h3>
|
<h3 class="title is-3">{% translate "Last Articles" %}</h3>
|
||||||
|
|
||||||
<a-carousel section-class="card-grid">
|
<a-carousel section-class="card-grid">
|
||||||
{% for object in articles|slice:3 %}
|
{% for object in articles %}
|
||||||
{% page_widget "card" object %}
|
{% page_widget "card" object %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</a-carousel>
|
</a-carousel>
|
||||||
|
|
|
@ -8,6 +8,7 @@ __all__ = ("BaseView", "BaseAPIView")
|
||||||
|
|
||||||
class BaseView(TemplateResponseMixin, ContextMixin):
|
class BaseView(TemplateResponseMixin, ContextMixin):
|
||||||
header_template_name = "aircox/widgets/header.html"
|
header_template_name = "aircox/widgets/header.html"
|
||||||
|
related_count = 7
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def station(self):
|
def station(self):
|
||||||
|
@ -16,6 +17,14 @@ class BaseView(TemplateResponseMixin, ContextMixin):
|
||||||
# def get_queryset(self):
|
# def get_queryset(self):
|
||||||
# return super().get_queryset().station(self.station)
|
# return super().get_queryset().station(self.station)
|
||||||
|
|
||||||
|
def get_related_queryset(self):
|
||||||
|
"""Return a queryset of related pages or None."""
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_related_url(self):
|
||||||
|
"""Return an url to the list of related pages."""
|
||||||
|
return None
|
||||||
|
|
||||||
def get_page(self):
|
def get_page(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -33,3 +33,11 @@ class EpisodeListView(PageListView):
|
||||||
filterset_class = EpisodeFilters
|
filterset_class = EpisodeFilters
|
||||||
parent_model = Program
|
parent_model = Program
|
||||||
attach_to_value = StaticPage.ATTACH_TO_EPISODES
|
attach_to_value = StaticPage.ATTACH_TO_EPISODES
|
||||||
|
|
||||||
|
|
||||||
|
class PodcastListView(PageListView):
|
||||||
|
model = Episode
|
||||||
|
filterset_class = EpisodeFilters
|
||||||
|
parent_model = Program
|
||||||
|
attach_to_value = StaticPage.ATTACH_TO_PODCASTS
|
||||||
|
queryset = Episode.objects.published().with_podcasts().order_by("-pub_date")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
|
|
||||||
from django.utils import timezone as tz
|
from django.utils import timezone as tz
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
|
|
||||||
from ..models import Diffusion, Log, Page, StaticPage
|
from ..models import Diffusion, Episode, Log, Page, StaticPage
|
||||||
from .base import BaseView
|
from .base import BaseView
|
||||||
from .mixins import AttachedToMixin
|
from .mixins import AttachedToMixin
|
||||||
|
|
||||||
|
@ -13,22 +13,24 @@ class HomeView(AttachedToMixin, BaseView, ListView):
|
||||||
attach_to_value = StaticPage.ATTACH_TO_HOME
|
attach_to_value = StaticPage.ATTACH_TO_HOME
|
||||||
model = Diffusion
|
model = Diffusion
|
||||||
queryset = Diffusion.objects.on_air().select_related("episode").order_by("-start")
|
queryset = Diffusion.objects.on_air().select_related("episode").order_by("-start")
|
||||||
diffusion_count = 7
|
log_diffusion_count = 3
|
||||||
publications_count = 7
|
|
||||||
|
publications_queryset = Page.objects.select_subclasses().published().order_by("-pub_date")
|
||||||
|
podcasts_queryset = Episode.objects.published().with_podcasts().order_by("-pub_date")
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return super().get_queryset().date(date.today())
|
return super().get_queryset().before(datetime.now() - timedelta(hours=12))
|
||||||
|
|
||||||
def get_logs(self, diffusions):
|
def get_logs(self, diffusions):
|
||||||
today = date.today()
|
today = date.today()
|
||||||
# diffs = Diffusion.objects.on_air().date(today)
|
# diffs = Diffusion.objects.on_air().date(today)
|
||||||
object_list = self.object_list
|
object_list = self.object_list
|
||||||
diffs = list(object_list[: self.diffusion_count])
|
diffs = list(object_list[: self.related_count - 3])
|
||||||
logs = Log.objects.on_air().date(today).filter(track__isnull=False)
|
logs = Log.objects.on_air().date(today).filter(track__isnull=False)
|
||||||
if diffs:
|
if diffs:
|
||||||
min_date = diffs[-1].start - timedelta(hours=1)
|
min_date = diffs[-1].start - timedelta(hours=1)
|
||||||
logs = logs.after(min_date)
|
logs = logs.after(min_date)
|
||||||
return Log.merge_diffusions(logs, object_list, diff_count=self.diffusion_count)
|
return Log.merge_diffusions(logs, object_list, diff_count=self.log_diffusion_count)
|
||||||
|
|
||||||
def get_next_diffs(self):
|
def get_next_diffs(self):
|
||||||
now = tz.now()
|
now = tz.now()
|
||||||
|
@ -38,12 +40,12 @@ class HomeView(AttachedToMixin, BaseView, ListView):
|
||||||
if current_diff:
|
if current_diff:
|
||||||
diffs = [current_diff] + list(next_diffs.exclude(pk=current_diff.pk)[:9])
|
diffs = [current_diff] + list(next_diffs.exclude(pk=current_diff.pk)[:9])
|
||||||
else:
|
else:
|
||||||
diffs = next_diffs[: self.diffusion_count]
|
diffs = next_diffs[: self.related_count]
|
||||||
return diffs
|
return diffs
|
||||||
|
|
||||||
def get_last_publications(self):
|
def get_last_publications(self):
|
||||||
# note: with postgres db, possible to use distinct()
|
# note: with postgres db, possible to use distinct()
|
||||||
qs = Page.objects.select_subclasses().published().order_by("-pub_date")
|
qs = self.publications_queryset.all()
|
||||||
parents = set()
|
parents = set()
|
||||||
items = []
|
items = []
|
||||||
for publication in qs:
|
for publication in qs:
|
||||||
|
@ -51,10 +53,13 @@ class HomeView(AttachedToMixin, BaseView, ListView):
|
||||||
if parent_id is not None and parent_id in parents:
|
if parent_id is not None and parent_id in parents:
|
||||||
continue
|
continue
|
||||||
items.append(publication)
|
items.append(publication)
|
||||||
if len(items) == self.publications_count:
|
if len(items) == self.related_count:
|
||||||
break
|
break
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
def get_last_podcasts(self):
|
||||||
|
return self.podcasts_queryset.all()[: self.related_count]
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
next_diffs = self.get_next_diffs()
|
next_diffs = self.get_next_diffs()
|
||||||
current_diff = next_diffs and next_diffs[0]
|
current_diff = next_diffs and next_diffs[0]
|
||||||
|
@ -66,6 +71,7 @@ class HomeView(AttachedToMixin, BaseView, ListView):
|
||||||
"logs": self.get_logs(self.object_list),
|
"logs": self.get_logs(self.object_list),
|
||||||
"next_diffs": next_diffs,
|
"next_diffs": next_diffs,
|
||||||
"last_publications": self.get_last_publications(),
|
"last_publications": self.get_last_publications(),
|
||||||
|
"last_podcasts": self.get_last_podcasts(),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return super().get_context_data(**kwargs)
|
return super().get_context_data(**kwargs)
|
||||||
|
|
|
@ -133,16 +133,6 @@ class PageDetailView(BasePageDetailView):
|
||||||
template_name = None
|
template_name = None
|
||||||
context_object_name = "page"
|
context_object_name = "page"
|
||||||
|
|
||||||
related_count = 7
|
|
||||||
|
|
||||||
def get_related_queryset(self):
|
|
||||||
"""Return a queryset of related pages or None."""
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_related_url(self):
|
|
||||||
"""Return an url to the list of related pages."""
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_template_names(self):
|
def get_template_names(self):
|
||||||
return super().get_template_names() + ["aircox/page_detail.html"]
|
return super().get_template_names() + ["aircox/page_detail.html"]
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,8 @@ class ProgramDetailView(BaseProgramMixin, PageDetailView):
|
||||||
return reverse("program-list") + f"?category__id={self.object.category_id}"
|
return reverse("program-list") + f"?category__id={self.object.category_id}"
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
episodes = Episode.objects.program(self.object).published().order_by("-pub_date")
|
episodes = Episode.objects.program(self.object).published().order_by("-pub_date")[: self.related_count]
|
||||||
articles = Article.objects.parent(self.object).published().order_by("-pub_date")
|
articles = Article.objects.parent(self.object).published().order_by("-pub_date")[: self.related_count]
|
||||||
return super().get_context_data(articles=articles, episodes=episodes, **kwargs)
|
return super().get_context_data(articles=articles, episodes=episodes, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user