Skip to content

Commit 4a00423

Browse files
committed
feat: make speakers dynamic and add test scripts
1 parent 272db24 commit 4a00423

File tree

7 files changed

+648
-163
lines changed

7 files changed

+648
-163
lines changed
Lines changed: 75 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -1,170 +1,82 @@
11
{% load static %}
2-
3-
<section id="speakers" class="bg-white px-[4%]">
4-
<div class="flex flex-col gap-10 w-full max-w-[1160px] mx-auto">
5-
<div class="px-6 flex flex-col gap-8 py-20">
6-
<h2 class="font-td_pinoy text-6xl text-orange-2 text-center m-0">Keynote Speakers</h2>
7-
<p class="text-4xl font-bold mb-0 font-bantayog text-brown-1 uppercase text-center">Discover our keynote speakers
8-
for PyCon Philippines 2025</p>
9-
</div>
10-
<div class="keynote-speakers-wrapper flex justify-center items-center gap-[30px] flex-wrap">
11-
<div class="rounded-[24px] bg-cream-1 flex flex-col sm:flex-row gap-10 w-full max-w-[100%] lg:max-w-[48%] grow items-center"
12-
style="padding: 30px;">
13-
<div class="overflow-hidden flex-shrink-0 w-[230px]">
14-
<img src="{% static 'img/speakers/speakers-img-1.jpg' %}" class="w-full object-cover rounded-[85px]"
15-
alt="JC Peralta - Image">
16-
</div>
17-
<div>
18-
<h3 class="font-bantayog text-brown-1 text-2xl">JC PERALTA</h3>
19-
<p class="font-nunito text-brown-2 font-semibold text-sm mb-2">Insert Title</p>
20-
<p class="font-nunito text-brown-2 text-[13px]">JC Peralta is a data scientist, Geospatial Machine Learning
21-
Consultant, and Climate Scientist. He earned his Master's in Atmospheric Science from Ateneo de Manila
22-
University in 2019 and has worked on projects in climate science, disaster management, renewable energy, and
23-
climate action.</p>
24-
</div>
25-
</div>
26-
<div class="rounded-[24px] bg-cream-2 flex flex-col sm:flex-row gap-10 w-full max-w-[100%] lg:max-w-[48%] grow items-center"
27-
style="padding: 30px;">
28-
<div class="overflow-hidden flex-shrink-0 w-[230px]">
29-
<img src="{% static 'img/speakers/speakers-img-2.jpg' %}" class="w-full object-cover rounded-[85px]"
30-
alt="Michael Kennedy - Image">
31-
</div>
32-
<div>
33-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Michael Kennedy</h3>
34-
<p class="font-nunito text-brown-2 font-semibold text-sm mb-2">Insert Title</p>
35-
<p class="font-nunito text-brown-2 text-[13px]">Michael Kennedy is a Python Software Foundation Fellow,
36-
entrepreneur, and host of the Talk Python To Me and Python Bytes podcasts. He founded Talk Python Training,
37-
offering 250+ hours of online courses for developers and data scientists. He is based in Portland, OR.</p>
38-
</div>
39-
</div>
40-
<div class="rounded-[24px] bg-cream-3 flex flex-col sm:flex-row gap-10 w-full max-w-[100%] lg:max-w-[48%] grow items-center"
41-
style="padding: 30px;">
42-
<div class="overflow-hidden flex-shrink-0 w-[230px]">
43-
<img src="{% static 'img/speakers/speakers-img-3.jpg' %}" class="w-full object-cover rounded-[85px]"
44-
alt="Matt Harrison - Image">
45-
</div>
46-
<div>
47-
<h3 class="font-bantayog text-brown-1 text-2xl">Matt Harrison</h3>
48-
<p class="font-nunito text-brown-2 font-semibold text-sm mb-2">Insert Title</p>
49-
<p class="font-nunito text-brown-2 text-[13px]">Matt Harrison is a Stanford-educated CS expert and bestselling
50-
author of Effective XGBoost and Effective Pandas. With 20+ years of Python experience, he has taught
51-
professionals at companies like Netflix and NASA and impacted thousands through live and online courses.</p>
52-
</div>
2+
{% if featured_speakers or speakers %}
3+
<section id="speakers" class="bg-white px-[4%]">
4+
<div class="flex flex-col gap-10 w-full max-w-[1160px] mx-auto">
5+
<div class="px-6 flex flex-col gap-8 py-20">
6+
<h2 class="font-td_pinoy text-6xl text-orange-2 text-center m-0">Keynote Speakers</h2>
7+
<p class="text-4xl font-bold mb-0 font-bantayog text-brown-1 uppercase text-center">
8+
Discover our keynote speakers
9+
for PyCon Philippines 2025
10+
</p>
5311
</div>
54-
<div class="rounded-[24px] bg-cream-1 flex flex-col sm:flex-row gap-10 w-full max-w-[100%] lg:max-w-[48%] grow items-center"
55-
style="padding: 30px;">
56-
<div class="overflow-hidden flex-shrink-0 w-[230px]">
57-
<img src="{% static 'img/speakers/speakers-img-4.jpg' %}" class="w-full object-cover rounded-[85px]"
58-
alt="Reina Reyes - Image">
59-
</div>
60-
<div>
61-
<h3 class="font-bantayog text-brown-1 text-2xl">Reina Reyes</h3>
62-
<p class="font-nunito text-brown-2 font-semibold text-sm mb-2">Insert Title</p>
63-
<p class="font-nunito text-brown-2 text-[13px]">Reinabelle "Reina" Reyes, Ph.D., is an Associate Professor at
64-
UP Diliman's National Institute of Physics, where she leads the Data and Computation Research Group. She
65-
consults for Z-Lift Solutions and WeSolve Foundation and received the 2023 NAST Outstanding Young Scientist
66-
Award.</p>
67-
</div>
12+
<div class="keynote-speakers-wrapper flex justify-center items-center gap-[30px] flex-wrap">
13+
{% for speaker in featured_speakers %}
14+
<div class="rounded-[24px] {% cycle 'bg-cream-1' 'bg-cream-2' 'bg-cream-3' %} flex flex-col sm:flex-row gap-10 w-full max-w-[100%] lg:max-w-[48%] grow items-center"
15+
style="padding: 30px">
16+
<div class="overflow-hidden flex-shrink-0 w-[230px]">
17+
{% if speaker.photo_url %}
18+
<img src="{{ speaker.photo_url }}"
19+
class="w-full object-cover rounded-[85px]"
20+
alt="{{ speaker.full_name }} - Image">
21+
{% else %}
22+
<img src="{% static 'img/speakers/speakers-img-1.jpg' %}"
23+
class="w-full object-cover rounded-[85px]"
24+
alt="{{ speaker.full_name }} - Image">
25+
{% endif %}
26+
</div>
27+
<div>
28+
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">{{ speaker.full_name }}</h3>
29+
{% if speaker.title %}
30+
<p class="font-nunito text-brown-2 font-semibold text-sm mb-2">{{ speaker.title }}</p>
31+
{% endif %}
32+
{% if speaker.introduction %}
33+
<p class="font-nunito text-brown-2 text-[13px]">{{ speaker.introduction }}</p>
34+
{% elif speaker.bio %}
35+
<p class="font-nunito text-brown-2 text-[13px]">{{ speaker.bio }}</p>
36+
{% endif %}
37+
</div>
38+
</div>
39+
{% empty %}
40+
<p class="text-center text-brown-2">No keynote speakers available yet.</p>
41+
{% endfor %}
6842
</div>
6943
</div>
70-
</div>
71-
72-
<div class="flex flex-col gap-10 w-full max-w-[1160px] mx-auto mt-[120px] pb-[90px]">
73-
<div class="px-6 flex flex-col gap-8">
74-
<h2 class="font-td_pinoy text-6xl text-orange-2 text-center m-0">Speakers</h2>
75-
<p class="text-4xl font-bold mb-0 font-bantayog text-brown-1 uppercase text-center">Discover our speakers for
76-
PyCon Philippines 2024</p>
77-
</div>
78-
<div class="speakers-wrapper flex items-center gap-[30px] flex-row flex-wrap justify-between">
79-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
80-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
81-
<img src="{% static 'img/speakers/speakers-img-1.jpg' %}" class="w-full object-cover rounded-[85px]"
82-
alt="JC Peralta - Image">
83-
</div>
84-
<div>
85-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Athena Aliafe Abe</h3>
86-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
87-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
88-
</div>
89-
</div>
90-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
91-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
92-
<img src="{% static 'img/speakers/speakers-img-2.jpg' %}" class="w-full object-cover rounded-[85px]"
93-
alt="JC Peralta - Image">
94-
</div>
95-
<div>
96-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Swastik Anupam</h3>
97-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
98-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
99-
</div>
100-
</div>
101-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
102-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
103-
<img src="{% static 'img/speakers/speakers-img-3.jpg' %}" class="w-full object-cover rounded-[85px]"
104-
alt="JC Peralta - Image">
105-
</div>
106-
<div>
107-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Neil Riego</h3>
108-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
109-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
110-
</div>
111-
</div>
112-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
113-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
114-
<img src="{% static 'img/speakers/speakers-img-4.jpg' %}" class="w-full object-cover rounded-[85px]"
115-
alt="JC Peralta - Image">
116-
</div>
117-
<div>
118-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Ian Panganiban</h3>
119-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
120-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
121-
</div>
122-
</div>
123-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
124-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
125-
<img src="{% static 'img/speakers/speakers-img-1.jpg' %}" class="w-full object-cover rounded-[85px]"
126-
alt="JC Peralta - Image">
127-
</div>
128-
<div>
129-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Athena Aliafe Abe</h3>
130-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
131-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
132-
</div>
133-
</div>
134-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
135-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
136-
<img src="{% static 'img/speakers/speakers-img-2.jpg' %}" class="w-full object-cover rounded-[85px]"
137-
alt="JC Peralta - Image">
138-
</div>
139-
<div>
140-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Fidel Ivan Racines</h3>
141-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
142-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
143-
</div>
144-
</div>
145-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
146-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
147-
<img src="{% static 'img/speakers/speakers-img-3.jpg' %}" class="w-full object-cover rounded-[85px]"
148-
alt="JC Peralta - Image">
149-
</div>
150-
<div>
151-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Albert Yumol</h3>
152-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
153-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
154-
</div>
44+
<div class="flex flex-col gap-10 w-full max-w-[1160px] mx-auto mt-[120px] pb-[90px]">
45+
<div class="px-6 flex flex-col gap-8">
46+
<h2 class="font-td_pinoy text-6xl text-orange-2 text-center m-0">Speakers</h2>
47+
<p class="text-4xl font-bold mb-0 font-bantayog text-brown-1 uppercase text-center">
48+
Discover our speakers for
49+
PyCon Philippines 2024
50+
</p>
15551
</div>
156-
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
157-
<div class="overflow-hidden flex-shrink-0 w-[250px]">
158-
<img src="{% static 'img/speakers/speakers-img-4.jpg' %}" class="w-full object-cover rounded-[85px]"
159-
alt="JC Peralta - Image">
160-
</div>
161-
<div>
162-
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">Yoshi Yamaguchi</h3>
163-
<p class="font-nunito text-brown-2 text-[13px]">Limit to 5 times only.</p>
164-
<p class="font-nunito text-brown-2 text-[13px]">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet. Pellentesque sit amet.</p>
165-
</div>
52+
<div class="speakers-wrapper flex items-center gap-[30px] flex-row flex-wrap justify-between">
53+
{% for speaker in speakers %}
54+
<div class="rounded-[24px] flex flex-col gap-5 w-full max-w-[100%] lg:max-w-[250px] grow items-center">
55+
<div class="overflow-hidden flex-shrink-0 w-[250px]">
56+
{% if speaker.photo_url %}
57+
<img src="{{ speaker.photo_url }}"
58+
class="w-full object-cover rounded-[85px]"
59+
alt="{{ speaker.full_name }} - Image">
60+
{% else %}
61+
<img src="{% static 'img/speakers/speakers-img-1.jpg' %}"
62+
class="w-full object-cover rounded-[85px]"
63+
alt="{{ speaker.full_name }} - Image">
64+
{% endif %}
65+
</div>
66+
<div>
67+
<h3 class="font-bantayog text-brown-1 text-2xl uppercase">{{ speaker.full_name }}</h3>
68+
{% if speaker.title %}<p class="font-nunito text-brown-2 text-[13px] mb-2">{{ speaker.title }}</p>{% endif %}
69+
{% if speaker.introduction %}
70+
<p class="font-nunito text-brown-2 text-[13px]">{{ speaker.introduction|truncatewords:30 }}</p>
71+
{% elif speaker.bio %}
72+
<p class="font-nunito text-brown-2 text-[13px]">{{ speaker.bio|truncatewords:30 }}</p>
73+
{% endif %}
74+
</div>
75+
</div>
76+
{% empty %}
77+
<p class="text-center text-brown-2">No speakers available yet.</p>
78+
{% endfor %}
16679
</div>
16780
</div>
168-
</div>
169-
170-
</section>
81+
</section>
82+
{% endif %}

app/home/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from bakery.views import BuildableTemplateView
55

66
from app.sponsors.models import Sponsor
7+
from app.speakers.models import Speaker
78
from config.constants import SPONSOR_TYPE_ORDER
89

910

@@ -25,4 +26,6 @@ def get_sponsors(self):
2526
def get_context_data(self, **kwargs):
2627
context = super().get_context_data(**kwargs)
2728
context["sponsors_by_type"] = self.get_sponsors()
29+
context["featured_speakers"] = Speaker.objects.filter(is_featured=True).order_by("first_name", "last_name")
30+
context["speakers"] = Speaker.objects.filter(is_featured=False).order_by("first_name", "last_name")
2831
return context

app/speakers/management/__init__.py

Whitespace-only changes.

app/speakers/management/commands/__init__.py

Whitespace-only changes.

scripts/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import os
2+
3+
import django
4+
5+
# Setup Django environment
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
7+
django.setup()

0 commit comments

Comments
 (0)