+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/2025/coc/coc.html b/templates/2025/coc/coc.html
new file mode 100644
index 00000000..d61d5643
--- /dev/null
+++ b/templates/2025/coc/coc.html
@@ -0,0 +1,61 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Code of Conduct | PyCon Africa" %}{% endif %}{% endblock %}
+
+
+
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/fin_aid/fin_aid.html b/templates/2025/fin_aid/fin_aid.html
new file mode 100644
index 00000000..25e3f597
--- /dev/null
+++ b/templates/2025/fin_aid/fin_aid.html
@@ -0,0 +1,165 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras permissions %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Financial Aid || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+ {% for fin_aid in fin_aids %}
+
+ {{ fin_aid.title }}
+
+
+
+
+
{{ fin_aid.financial_assistance | markdown | safe }}
+ {{ form.media }}
+
+
+
+
+ {% if fin_aid.is_form_open %}
+
+ {% elif fin_aid.is_form_closed %}
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/fin_aid/financial-grant.html b/templates/2025/fin_aid/financial-grant.html
new file mode 100644
index 00000000..acf46e8c
--- /dev/null
+++ b/templates/2025/fin_aid/financial-grant.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {% if status.is_closed %}
+
Apply now . . .
+ {% else %}
+
Apply now . . .
+ {% endif %}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/2025/footer.html b/templates/2025/footer.html
new file mode 100644
index 00000000..d65d6a35
--- /dev/null
+++ b/templates/2025/footer.html
@@ -0,0 +1,83 @@
+{% load %}
+{% load static %}
+
+
+{% block footer %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
PyCon Africa is organised by a multi-national
+ team of volunteers on behalf of the global Python programming community.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/health_safety_guidelines/health_safety_guidelines.html b/templates/2025/health_safety_guidelines/health_safety_guidelines.html
new file mode 100644
index 00000000..90f2d746
--- /dev/null
+++ b/templates/2025/health_safety_guidelines/health_safety_guidelines.html
@@ -0,0 +1,57 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Health and Safety Guidelines|| PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Health and Safety Guidelines
+
+
+
+ Home
+ /
+
+
+ Health and Safety Guidelines
+
+
+
+
+
+
+
+
+
+
+
+
+ {% for guideline in health_safety_guidelines.all|slice:"0:1" %}
+
+ {{ guideline.title }}
+
+
+
+
+
{{ guideline.health_safety_guideline | markdown | safe }}
+ {{ form.media }}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/home/all_years.html b/templates/2025/home/all_years.html
new file mode 100644
index 00000000..e1cf5c59
--- /dev/null
+++ b/templates/2025/home/all_years.html
@@ -0,0 +1,1128 @@
+{% extends "base.html" %}
+{% load i18n static %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Home | PyCon Africa" %}{% endif %}{% endblock %}
+
+
+
+
+{% block content %}
+
+
+{% include 'navbar.html' %}
+
+
+
+
+
+
+
+
+
+
+
PyCon Africa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
PyCon Africa will be Online
+
PyCon Africa is the gathering of the Pan African Python Community.
+
We had the very first edition in 2019 and while the conference cannot take place in person this year, we would still be having it online making it PycOnline Africa 2020!
+
+
+
+
+
+
+
+
+
+
+
+
+
Important
+ |
+ Timelines
+
+
+
+
+
+
+
+
+
+
+
+ ×
+
+
+
+
+
+
+
+
+
+
+
+ “
+
+ Physical distancing… is absolutely essential, but it doesn’t mean that socially, we have to disconnect.…
+ We want people to still remain connected, so find ways to do that, find ways through the internet and social media
+ to remain connected, because your mental health going through this is just as important as your physical health.
+
+ ”
+
+
+
+
+
+
+
+
+
Dr Maria Van Kerkhove
+ — Infectious disease epidemiologist and WHO COVID-19 technical lead
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello
+ Everyone!
+
+ The Pycon Africa team is very excited to announce that PyCon Africa will be held online this
+ year! We are grateful for your support as we make this change in the interest of protecting the
+ health and safety of our community.
+
+
+ We are excited to continue the Pycon tradition of sharing knowledge and bringing our community
+ together. Throughout the 4th - 8th of August, you can expect talks from speakers from across Africa
+ and the world, interactive sessions with fellow community members and collaborative projects that you are invited to join.
+
+
+ We realise that internet access and stability in Africa is still inequitable, and therefore most of
+ our content, with a few exceptions, will be pre-recorded not live. This also gives community members
+ from around the world the ability to enjoy PyCon Africa, at your own convenience.
+
+
+ Our call for proposals is open immediately and will close on the 5th of June. We look forward to
+ receiving your talk submission. Our sponsorship prospectus is also open and you can find it here .
+ We would love your support for this event! Finally, to stay up to date, follow our social media pages
+ on Twitter and Facebook .
+ All my very best,
+
Marlene Mhangami
+
— Conference Chair
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Our Schedules are up!
+
+ Pycon Africa is going virtual in August 2020!
+ Click on the link below to view our full schedule
+
+
+
+ View Schedule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Our
+ |
+ Speakers
+
+
+
+
+
+ {% for keynote in keynotes %}
+ {% if keynote.is_visible %}
+
+
+
+
+
+ {{ keynote.speaker_name }}
+
+
KEYNOTE SPEAKER
+
+
{{ keynote.organization }}
+
+
+
+
+
+
+ {% else %}
+ {% endif %}
+ {% empty %}
+
There is nothing in this list
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Our
+ |
+ Panelist
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Scott Hanselman
+ Partner Program Manager
+ Session:
+ Technical content creation and personal productivity.
+
+
+
+
+ Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Aniedi Udo-Obong
+ Support Manager
+ Panel Session: The Future of Open Source in Africa
+
+
+
+
Aniedi Udo-Obong is a developer, product manager, open source evangelist with over 10 years experience
+ working with startups in HR, media, finance, education & logistics.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Paul Everitt
+ Developer Advocate
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Paul is the PyCharm Developer Advocate at JetBrains. Before that, Paul was a co-founder of Zope Corporation, taking the first open source application server through $14M of funding. Paul has bootstrapped both the Python Software Foundation and the Plone Foundation. Prior to that, Paul was an officer in the US Navy, starting www.navy.mil in 1993.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Edidiong Asikpo
+ Software Engineer
+ Panel Session: The Future of Open Source in Africa
+
+
+
+
+ Edidiong Asikpo is a software engineer from Akwa Ibom, Nigeria. She is a passionate professional with multi-faceted skills and experience spanning across Software Engineering, Developer Relations, community building, technical writing, and Open Source contributions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Reuven M. Lerner
+ Python trainer
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Reuven Lerner is a full-time Python trainer. In a given year, he teaches courses at companies in the United States, Europe, Israel, India, and China — as well as to people around the world, via his online courses, including Weekly Python Exercise.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Daniel Madalitso Phiri
+ Developer Relations
+ Panel Session: The Future of Open Source in Africa
+
+
+
+
Daniel Madalitso Phiri is a Developer Advocate, Builder of Wacky things, Disk Jockey, Lorde superfan and Community Builder from Lusaka, Zambia.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Trey Hunner
+ Developer Advocate
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Trey Hunner helps Python developers level-up their skills through his weekly Python skill-building service, Python Morsels . He also helps teams turn experienced developers into experienced Python developers through on-site and remote Python trainings .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Akintunde Sultan
+ Developer Avocado
+ Panel Session: The Future of Open Source in Africa
+
+
+
+
+ Ambassador at GrantfortheWeb - Working with the team from Mozilla, Coil and Creative Common to foster the adoption of Web monetization in Africa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Bob Belderbos
+ Software developer / Co-founder PyBites
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Bob is a software developer and co-founder of PyBites. He is passionate about writing software,
+ quality code and helping other people grow their careers using Python.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Frank Tamre
+ Software Engineer
+ Panel Session: The Future of Open Source in Africa
+
+
+
+
+I worked at Intel as an Applications Engineer. I consult on various Android projects both as a developer and as a systems architect. I then co-founded one of the first coding boot camps in Africa - Moringa School. Then started EarlyCamp that trains young children aged 4-17 years old how to solve problems with technology. Lead organizer at droidconke, KotlinKenya and Android254 - the largest Android developer community in Africa. A chef, reader and swimmer when not programming or teaching."
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Matt Harrison
+ Corporate trainer and consultant
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Matt runs MetaSnake, a Python training and consulting company. He has authored many books on Python and ran the local use group for 5 years.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Julian Sequeira
+ Global Project Manager
+ Panel Session: Entrepreneurship and Python
+
+
+
+
+ Julian is a self-taught Python programmer. Coming from a career in Enterprise grade servers and Data Centres he made the transition to Python Programming using the "learn by teaching" methodology. Creating PyBites with his best friend has not only taught him what he knows about Python but has also sparked his passion for the Entrepreneur world. You'll find Julian coaching people in Python, Careers and Mindset all while cracking terrible dad jokes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PyCon Africa will be organized into four distinct tracks, namely PyData, Web / DevOps, General Python, and Python Community.
+
+
+
+
+
+
PyData
+
+ The topics of interest for PyData include, but are not limited to:
+ Numerical and Scientific Computations Machine Learning Text Mining and Natural language Processing Data mining and Analytics Big Data Data visualization tools and libraries Reproducible Research Linked Data and Semantic Web
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Web / Devops
+
+ The topics of interest for Web/DevOps include, but are not limited to:
+
+ Frameworks (Django, Flask, Pyramid, etc) Background Tasks (Celery, etc) WSGI Orchestration (Ansible, Fabric, etc) Continuos Integration Core & Internals Testing Enterprise
+
+
+
+
+
+
+
+
+
General Python
+
+ Suggested topics for this track include, but are not limited to:
+
+ Python libraries and extensions Databases Documentation Open Source Python projects Packaging
+ Issues Programming Tools Project Best Practices
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Python Community
+
+
+ Diversity in the Python Community, Organising a Conference or Meetup
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2019
+ |
+ Highlights
+
+
PyCon Africa 2019 was the first-ever pan-African meeting of the Python programming community,
+ and took place in Accra, Ghana from the 6th - 10th August. It included five days of workshops, talks, sprints and events
+ such as a Django Girls tutorial.
+
+
+
+ VIDEO
+
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'footer.html' %}
+
+
+
+
+{% endblock %}
+
+
+
+
+
+
+
diff --git a/templates/2025/home/home.html b/templates/2025/home/home.html
new file mode 100644
index 00000000..ad9d726c
--- /dev/null
+++ b/templates/2025/home/home.html
@@ -0,0 +1 @@
+{% include 'home/home.html' %}
\ No newline at end of file
diff --git a/templates/2025/navbar.html b/templates/2025/navbar.html
new file mode 100644
index 00000000..3898e628
--- /dev/null
+++ b/templates/2025/navbar.html
@@ -0,0 +1,206 @@
+{% load %}
+{% load static base_extras %}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/2025/pages/page.html b/templates/2025/pages/page.html
new file mode 100644
index 00000000..32928b62
--- /dev/null
+++ b/templates/2025/pages/page.html
@@ -0,0 +1,68 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}{% block meta_title %}
+{% if page.meta_title %}
+ {{ page.meta_title }}
+{% else %}
+ {{ page.page_name }} | {% trans "PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+
+{% block title %}{{ meta_title }}{% endblock %}
+{% block description %}{{ meta_description }}{% endblock %}
+{% block author %}{{ meta_author }}{% endblock %}
+
+{% block og_title %}{{ meta_title }}{% endblock %}
+{% block og_description %}{{ meta_description }}{% endblock %}
+{% block og_image %}{{ meta_og_image }}{% endblock %}
+{% block og_url %}{{ request.build_absolute_uri }}{% endblock %}
+{% block og_type %}website{% endblock %}
+{% block og_site_name %}PyCon Africa{% endblock %}
+
+{% block twitter_title %}{{ meta_title }}{% endblock %}
+{% block twitter_description %}{{ meta_description }}{% endblock %}
+{% block twitter_image %}{{ meta_og_image }}{% endblock %}
+{% block twitter_site %}@PyConAfrica{% endblock %}
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
{{ page.page_name }}
+
+
+
+ Home
+ /
+
+
+ {{ page.page_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ page.page_title }}
+
+
+
+
+
{{ page.content | markdown | safe }}
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/privacy/privacy.html b/templates/2025/privacy/privacy.html
new file mode 100644
index 00000000..6b121c6f
--- /dev/null
+++ b/templates/2025/privacy/privacy.html
@@ -0,0 +1,55 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Privacy and Data Policy || PyCon Ghana" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Privacy and Data Policy
+
+
+
+ Home
+ /
+
+
+ Privacy and Data Policy
+
+
+
+
+
+
+
+
+
+
+
+
+ {% for privacypolicy in privacypolicies.all|slice:"0:1" %}
+
+ {{ coc.title }}
+
+
+
+
+
{{ privacypolicy.privacy_policy | markdown | safe }}
+ {{ form.media }}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/schedule/create_schedule.html b/templates/2025/schedule/create_schedule.html
new file mode 100644
index 00000000..32dad357
--- /dev/null
+++ b/templates/2025/schedule/create_schedule.html
@@ -0,0 +1,158 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Create Schedule || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if already_reviewed %}
+
You have already reviewed this proposal.
+
+ {% else %}
+
+
+
+
+
+
+
Create Talk Schedule for {{ year }}
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/schedule/new.html b/templates/2025/schedule/new.html
new file mode 100644
index 00000000..8de5edec
--- /dev/null
+++ b/templates/2025/schedule/new.html
@@ -0,0 +1,34 @@
+{% extends 'base.html' %}
+
+{% block content %}
+
+
Create Schedule for PyCon {{ year }}
+
+
+ {% if messages %}
+
+ {% for message in messages %}
+
{{ message }}
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/schedule/schedule.html b/templates/2025/schedule/schedule.html
new file mode 100644
index 00000000..2d973006
--- /dev/null
+++ b/templates/2025/schedule/schedule.html
@@ -0,0 +1,308 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras schedule_tags %}
+
+{% block title %}
+{% if meta_title %}
+ {{ meta_title }}
+{% else %}
+ {% trans "Schedule | PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+{% block meta_title %}
+{% if meta_title %}
+ {{ meta_title }}
+{% else %}
+ {% trans "Schedule | PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+{% block og_description %}
+{% if meta_description %}
+ {{ meta_description }}
+{% else %}
+ {% trans "Explore the exciting schedule of PyCon Africa, filled with insightful talks, keynotes, and tutorials." %}
+{% endif %}
+{% endblock %}
+
+{% block twitter_title %}
+{% if meta_title %}
+ {{ meta_title }}
+{% else %}
+ {% trans "Schedule | PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+{% block twitter_description %}
+{% if meta_description %}
+ {{ meta_description }}
+{% else %}
+ {% trans "Explore the exciting schedule of PyCon Africa, filled with insightful talks, keynotes, and tutorials." %}
+{% endif %}
+{% endblock %}
+
+
+
+
+{% block content %}
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Schedule
+
+
+
+ Home
+ /
+
+
+ Schedule
+
+
+
+
+
+
+
+ {% if perms.conference_schedule.add_schedule or perms.conference_schedule.change_schedule %}
+
+
+ Hi {% if request.user.user_profile and request.user.user_profile.name %}{{ request.user.user_profile.name }} {% else %}PyCon Africa{% endif %} 😊, Create/Add to the Schedule
+
+
+ {% endif %}
+
+ This is our provisional schedule and is subject to change, and all times listed are based on the
+ Greenwich Mean Time (GMT+0) zone.
+
+
+
+
+ Concurrent Sessions
+
+ Keynote
+
+ Panel Discussion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% for day in days %}
+
+ {% if schedules|get_item:day %}
+
+ {% for schedule in schedules|get_item:day %}
+
+
+
+
+
+ {% if schedule.is_an_event %}
+
+ {% else %}
+
+
+ {% if schedule.talk.talk_type == 'Lightning Talk' or schedule.talk.talk_type == 'Short Talk' or schedule.talk.talk_type == 'Long Talk' %}
+
+ {% elif schedule.talk.talk_type == 'Tutorial' %}
+
+ {% elif schedule.talk.talk_type == 'Sponsored Talk' %}
+
+ {% elif schedule.talk.talk_type == 'Keynote Speaker' %}
+
+ {% endif %}
+ {% if schedule.fa_icon %} {% endif %}
+ | {{ schedule.talk.title }}
+
+ {% endif %}
+
+
+
+ Time: {{ schedule.start_time|time:"h:i A" }} - {{ schedule.end_time|time:"h:i A" }}
+ |
+ {% if schedule.allocated_room %}
+ Room: {{ schedule.allocated_room.room_name }}
+ {% endif %}
+
+
+
+
+ {% if schedule.is_an_event %}
+ {{ schedule.event_description | truncatechars:150 }}
+ {% else %}
+ {{ schedule.talk.talk_abstract | truncatechars:150 }}
+ {% endif %}
+
+
+
+ {% if schedule.is_an_event %}
+ {% else %}
+ {% if schedule.talk.user.user_profile.profile_image %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
+
+
+
+ {{ schedule.talk.user.user_profile.name|default:"PyCon Africa" }} {{ schedule.talk.user.user_profile.surname|default:"Speaker" }}
+
+
+
+ {% for speaker in schedule.talk.speakers.all %}
+ |
+ {% if speaker.user_profile.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+ {{ speaker.user_profile.name }} {{ speaker.user_profile.surname }}{% if not forloop.last %}, {% endif %}
+
+ {% endfor %}
+ {% endif %}
+
+
+
+
+
+ {% if schedule.talk.talk_type == 'Lightning Talk' or schedule.talk.talk_type == 'Short Talk' or schedule.talk.talk_type == 'Long Talk' %}
+
+
+ Talk
+
+ {% elif schedule.talk.talk_type == 'Tutorial' %}
+
+
+ Tutorial
+
+ {% elif schedule.talk.talk_type == 'Sponsored Talk' %}
+
+
+ Sponsored Talk
+
+ {% elif schedule.talk.talk_type == 'Keynote Speaker' %}
+
+
+ Keynote Speaker
+
+ {% else %}
+ {% endif %}
+
+
+ {% if schedule.concurrent_talk %}
+
+
+ {% endif %}
+ {% if schedule.is_a_keynote_speaker %}
+
+ {% endif %}
+ {% if schedule.is_a_panel %}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+
+ {% else %}
+
No events or talks scheduled for this day.
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/schedule/schedule_home.html b/templates/2025/schedule/schedule_home.html
new file mode 100644
index 00000000..a62b9bab
--- /dev/null
+++ b/templates/2025/schedule/schedule_home.html
@@ -0,0 +1,221 @@
+{% load i18n static markdown_extras %}
+
+
+
+
+
+
+
+
+
+ {% if request.user.is_superuser or is_schedule_live or perms.conference_schedule.add_schedule or perms.conference_schedule.change_schedule %}
+
+
+
+
+
+
+
+
+ {% for day_schedule in day_schedules %}
+
+
+ {% if day_schedule.schedules %}
+
+ {% for schedule in day_schedule.schedules|slice:":3" %}
+
+
+
+
+
+ {% if schedule.is_an_event %}
+
+ {% else %}
+
+
+ {% if schedule.talk.talk_type == 'Lightning Talk' or schedule.talk.talk_type == 'Short Talk' or schedule.talk.talk_type == 'Long Talk' %}
+
+ {% elif schedule.talk.talk_type == 'Tutorial' %}
+
+ {% elif schedule.talk.talk_type == 'Sponsored Talk' %}
+
+ {% elif schedule.talk.talk_type == 'Keynote Speaker' %}
+
+ {% endif %}
+ {% if schedule.fa_icon %} {% endif %}
+ | {{ schedule.talk.title }}
+
+ {% endif %}
+
+
+
+ Time: {{ schedule.start_time|time:"h:i A" }} - {{ schedule.end_time|time:"h:i A" }}
+ |
+ {% if schedule.allocated_room %}
+ Room: {{ schedule.allocated_room.room_name }}
+ {% endif %}
+
+
+
+
+ {% if schedule.is_an_event %}
+ {{ schedule.event_description | truncatechars:150 }}
+ {% else %}
+ {{ schedule.talk.talk_abstract | truncatechars:150 }}
+ {% endif %}
+
+
+
+ {% if schedule.is_an_event %}
+ {% else %}
+ {% if schedule.talk.user.user_profile.profile_image %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
+
+
+
+ {{ schedule.talk.user.user_profile.name|default:"PyCon Africa" }} {{ schedule.talk.user.user_profile.surname|default:"Speaker" }}
+
+
+
+ {% for speaker in schedule.talk.speakers.all %}
+ |
+ {% if speaker.user_profile.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+ {{ speaker.user_profile.name }} {{ speaker.user_profile.surname }}{% if not forloop.last %}, {% endif %}
+
+ {% endfor %}
+ {% endif %}
+
+
+
+
+
+ {% if schedule.talk.talk_type == 'Lightning Talk' or schedule.talk.talk_type == 'Short Talk' or schedule.talk.talk_type == 'Long Talk' %}
+
+
+ Talk
+
+ {% elif schedule.talk.talk_type == 'Tutorial' %}
+
+
+ Tutorial
+
+ {% elif schedule.talk.talk_type == 'Sponsored Talk' %}
+
+
+ Sponsored Talk
+
+ {% elif schedule.talk.talk_type == 'Keynote Speaker' %}
+
+
+ Keynote Speaker
+
+ {% else %}
+ {% endif %}
+
+
+ {% if schedule.concurrent_talk %}
+
+
+ {% endif %}
+ {% if schedule.is_a_keynote_speaker %}
+
+ {% endif %}
+ {% if schedule.is_a_panel %}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+
+ {% else %}
+
No events or talks scheduled for this day.
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+ {% else %}
+
+ Schedule Coming Soon! The schedule is currently being finalized. Please check back later.
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/2025/schedule/talk_details.html b/templates/2025/schedule/talk_details.html
new file mode 100644
index 00000000..e92b1930
--- /dev/null
+++ b/templates/2025/schedule/talk_details.html
@@ -0,0 +1,303 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+
+{% block meta_title %}
+ {% if meta_title %}
+ {{ meta_title }}
+ {% else %}
+ {{ talk.title }} | PyCon Africa
+ {% endif %}
+{% endblock %}
+
+{% block og_title %}
+ {% if meta_title %}
+ {{ meta_title }}
+ {% else %}
+ {{ talk.title }} | PyCon Africa
+ {% endif %}
+{% endblock %}
+
+{% block meta_description %}
+ {% if meta_description %}
+ {{ meta_description }}
+ {% else %}
+ {{ talk.talk_abstract|truncatewords:30 }}
+ {% endif %}
+{% endblock %}
+
+{% block og_description %}
+ {% if meta_description %}
+ {{ meta_description }}
+ {% else %}
+ {{ talk.talk_abstract|truncatewords:30 }}
+ {% endif %}
+{% endblock %}
+
+{% block meta_og_image %}
+ {% if meta_og_image %}
+ {{ meta_og_image }}
+ {% else %}
+ /static/images/default-image-url.jpg
+ {% endif %}
+{% endblock %}
+
+{% block og_image %}
+ {% if meta_og_image %}
+ {{ meta_og_image }}
+ {% else %}
+ /static/images/default-image-url.jpg
+ {% endif %}
+{% endblock %}
+
+{% block meta_og_url %}
+ {{ request.build_absolute_uri }}
+{% endblock %}
+
+{% block og_url %}
+ {{ request.build_absolute_uri }}
+{% endblock %}
+
+{% block meta_og_type %}
+ website
+{% endblock %}
+
+{% block og_type %}
+ website
+{% endblock %}
+
+{% block meta_og_site_name %}
+ PyCon Africa
+{% endblock %}
+
+{% block og_site_name %}
+ PyCon Africa
+{% endblock %}
+
+{% block twitter_title %}
+ {% if meta_title %}
+ {{ meta_title }}
+ {% else %}
+ {{ talk.title }} | PyCon Africa
+ {% endif %}
+{% endblock %}
+
+{% block twitter_description %}
+ {% if meta_description %}
+ {{ meta_description }}
+ {% else %}
+ {{ talk.talk_abstract|truncatewords:30 }}
+ {% endif %}
+{% endblock %}
+
+{% block twitter_image %}
+ {% if meta_og_image %}
+ {{ meta_og_image }}
+ {% else %}
+ /static/images/default-image-url.jpg
+ {% endif %}
+{% endblock %}
+
+{% block twitter_card %}
+ summary_large_image
+{% endblock %}
+
+{% block twitter_site %}
+ @PyConAfrica
+{% endblock %}
+
+{% block content %}
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
{{ talk.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ talk.title }}
+
+
+
+
+ {% if talk.talk_category == "GP / Web" %}
+ General Python, Web/DevOps
+ {% elif talk.talk_category == "GC" %}
+ General Community
+ {% elif talk.talk_category == "ET" %}
+ Emerging Technologies
+ {% elif talk.talk_category == "Education" %}
+ Education
+ {% elif talk.talk_category == "O" %}
+ Other
+ {% endif %}
+
+
+
+ {% if talk.talk_type %}
+
+ {{ talk.talk_type }}
+
+ {% else %}
+ {% endif %}
+
+ {% if talk.intended_audience == "BGN-L" %}
+
Beginner
+ {% elif talk.intended_audience == "INT-L" %}
+ Intermediate
+ {% elif talk.intended_audience == "EXP-L" %}
+ Expert
+ {% else %}
+ General
+ {% endif %}
+
+
+
+
+
+
+
+
Abstract : {% if talk.talk_abstract %} {{ talk.talk_abstract | markdown | safe }}
+ {{ form.media }}{% else %}
+
+
+
{{ talk.user.user_profile.name }}'s abstract will be updated shortly, please check back later.
+
+
+
+
+ {% endif %}
+
+
+
GO BACK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Other Talks
+
+
+ {% if related_talks %}
+ {% for related_talk in related_talks %}
+
+
+
+ {% if related_talk.user.user_profile.profile_image %}
+
+
+ {% else %}
+
+
+ {% endif %}
+
+
+ by {{ related_talk.user.user_profile.name }} {{ related_talk.user.user_profile.surname }}
+
+ {% if related_talk.intended_audience == "BGN-L" %}
+
+ {% elif related_talk.intended_audience == "INT-L" %}
+
+ {% elif related_talk.intended_audience == "EXP-L" %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+ {% else %}
+ No Related Talks
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/speakers/speaker_details.html b/templates/2025/speakers/speaker_details.html
new file mode 100644
index 00000000..ed112c40
--- /dev/null
+++ b/templates/2025/speakers/speaker_details.html
@@ -0,0 +1,283 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags countries markdown_extras embed_video_tags %}
+
+
+
+
+{% block meta_title %}
+ {% if meta_title %}
+ {{ meta_title }}
+ {% else %}
+ Speaker | PyCon Africa
+ {% endif %}
+{% endblock %}
+
+{% block og_title %}
+ {{ meta_title }}
+{% endblock %}
+
+{% block og_description %}
+ {{ meta_description }}
+{% endblock %}
+
+{% block og_image %}
+ {{ meta_og_image }}
+{% endblock %}
+
+{% block og_url %}
+ {{ request.build_absolute_uri }}
+{% endblock %}
+
+{% block og_type %}
+ website
+{% endblock %}
+
+{% block og_site_name %}
+ PyCon Africa
+{% endblock %}
+
+{% block twitter_title %}
+ {{ meta_title }}
+{% endblock %}
+
+{% block twitter_description %}
+ {{ meta_description }}
+{% endblock %}
+
+{% block twitter_image %}
+ {{ meta_og_image }}
+{% endblock %}
+
+{% block twitter_site %}
+ @PyConAfrica
+{% endblock %}
+
+
+
+
+
+
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
{{ speaker.name|capfirst }}'s Profile
+
+
+
+ Home
+ /
+
+
+ Speakers
+ /
+
+
+ {{ speaker.name|capfirst }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
{{ speaker.name|capfirst }} {{ speaker.surname|capfirst }}
+
+ {% if speaker.profession %}{{ speaker.profession }}{% endif %}
+ {% if speaker.organization %} at {{ speaker.organization }}{% endif %}.
+
+
{{ speaker.city }}, {{ speaker.country.name }}.
+
+
+
+
+ {% if speaker.website %}
+
+
+
+
+
+
+ {% endif %}
+ {% if speaker.twitter_handle %}
+
+
+
+
+
+
+ {% endif %}
+ {% if speaker.github_username %}
+
+
+
+
+
+
+ {% endif %}
+ {% if speaker.linkedin %}
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
{{ speaker.biography | markdown | safe | truncatechars:1300 }}
+
+
+
+
+
+
+
+
+
+ {% if talks %}
+
Session(s) by {{ speaker.name|capfirst }}
+
+ {% for talk in talks %}
+
+
+ {% if talk.talk_type == "Tutorial" %}
+
+ {% elif talk.talk_type == "Keynote Speaker" %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
+
{{ schedules.start_time.time|time:"h:iA" }}
+
+
{{ talk.talk_abstract|truncatewords:35 }}
+ {% if talk.talk_type %}
+
{{ talk.talk_type }}
+ {% endif %}
+ {% if talk.intended_audience == "BGN-L" %}
+
Beginner
+ {% elif talk.intended_audience == "INT-L" %}
+
Intermediate
+ {% elif talk.intended_audience == "EXP-L" %}
+
Expert
+ {% endif %}
+
+
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+ GO BACK
+
+
+
+
+
+
+
+
+
+
+
+
Other Speakers
+ {% if related_speakers %}
+ {% for speaker in related_speakers.all|slice:"0:5" %}
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
{{ speaker.profession|truncatewords:2 }}
+
+
+ {% endfor %}
+ {% else %}
+
No related speakers available.
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/speakers/speaker_list.html b/templates/2025/speakers/speaker_list.html
new file mode 100644
index 00000000..fa2ef945
--- /dev/null
+++ b/templates/2025/speakers/speaker_list.html
@@ -0,0 +1,208 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}{% block og_title %}
+{% if meta_title %}
+ {{ meta_title }}
+{% elif page %}
+ {{ page.meta_title }}
+{% else %}
+ {% trans "Speakers | PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+{% block og_description %}
+{% if meta_description %}
+ {{ meta_description }}
+{% elif page %}
+ {{ page.meta_description }}
+{% else %}
+ {% trans "Meet the incredible speakers at PyCon Africa." %}
+{% endif %}
+{% endblock %}
+
+{% block twitter_title %}
+{% if meta_title %}
+ {{ meta_title }}
+{% elif page %}
+ {{ page.meta_title }}
+{% else %}
+ {% trans "Speakers | PyCon Africa" %}
+{% endif %}
+{% endblock %}
+
+{% block twitter_description %}
+{% if meta_description %}
+ {{ meta_description }}
+{% elif page %}
+ {{ page.meta_description }}
+{% else %}
+ {% trans "Meet the incredible speakers at PyCon Africa." %}
+{% endif %}
+{% endblock %}
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Speakers
+
+
+
+ Home
+ /
+
+
+ Speakers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Note: We are excited to announce that our speaker lineup is still growing! This page will be updated regularly as more speakers confirm their participation. Stay tuned for the latest additions and details about their talks.
+
+
+
+ {% for speaker in keynote_speakers %}
+
+
+
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
Keynote Speaker
+
+
+
+
+ {{ speaker.profession }}
+
+
+ {% if speaker.organization %}
+ {{ speaker.organization }}
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+ {% for speaker in other_speakers %}
+
+
+
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
+
+
+
+ {{ speaker.profession | truncatechars:20 }}
+
+
+ {% if speaker.organization %}
+ {{ speaker.organization }}
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/speakers/speaker_talk.html b/templates/2025/speakers/speaker_talk.html
new file mode 100644
index 00000000..364b19f1
--- /dev/null
+++ b/templates/2025/speakers/speaker_talk.html
@@ -0,0 +1,95 @@
+{% extends "base.html" %}
+{% load i18n static %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Speaker Talk | PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+{% include 'navbar.html' %}
+
+
+
+
+
{{ speaker.speaker_name }} {{ speaker.talk_type }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ speaker.talk_title }}
+
+
Talk by: {{ speaker.speaker_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Description
+
+ {{ speaker.talk_description|safe }}
+
+
+
+
+
+
+
+
+ Video
+
+
+
+
+
+ VIDEO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'footer.html' %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/speakers/speakers_home.html b/templates/2025/speakers/speakers_home.html
new file mode 100644
index 00000000..e793b17c
--- /dev/null
+++ b/templates/2025/speakers/speakers_home.html
@@ -0,0 +1,81 @@
+
+{% load keynote_tags %}
+
+
+
+
+
+
Our Speakers
+
Meet some of our distinguished speakers for PyCon Africa 2024
+
+
+
+ {% get_speakers as keynote_speakers other_speakers %}
+
+
+
+
Keynote Speakers
+
+ {% for speaker in keynote_speakers %}
+
+
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
{{ speaker.name }}
+
{{ speaker.job_title }} {{ speaker.company }}
+
View Profile
+
+
+
+ {% empty %}
+
+
No keynote speakers announced yet. Stay tuned!
+
+ {% endfor %}
+
+
+
+
+
+
+
Featured Speakers
+
+ {% for speaker in other_speakers %}
+
+
+
+
+ {% if speaker.profile_image %}
+
+ {% else %}
+
+ {% endif %}
+
+
{{ speaker.name }}
+
{{ speaker.job_title }} {{ speaker.company }}
+
View Profile
+
+
+
+ {% empty %}
+
+
No featured speakers announced yet. Stay tuned!
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
diff --git a/templates/2025/sponsor-us/sponsor-us.html b/templates/2025/sponsor-us/sponsor-us.html
new file mode 100644
index 00000000..a6979e6d
--- /dev/null
+++ b/templates/2025/sponsor-us/sponsor-us.html
@@ -0,0 +1,132 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Sponsor Us | PyCon Africa" %}{% endif %}{% endblock %}
+
+
+
+
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
+
+
+
+
+
Sponsorship
+ Packages
+
{{ sponsor_us_page.why_sponsor_us | markdown | safe }}
+ {{ form.media }}
+
+ {% if sponsor_us_page.prospectus_link %}
+
+
Download our Prospectus
+ {% endif %}
+
+
+
+ {% for tier in sponsorship_tiers %}
+ {% if forloop.counter <= 2 %}
+
+
+
{{ tier.name }}
+ ${{ tier.amount }}
+
+
{{ tier.details | markdown | safe }}
+ {{ form.media }}
+
+ {% if tier.benefits.exists %}
+
Highlights of this package:
+
+ {% for benefit in tier.benefits.all %}
+
{{ benefit.description | markdown | safe }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% if tier.additional_resources.exists %}
+
This package also includes:
+
+ {% for additional_resource in tier.additional_resources.all %}
+ {{ additional_resource.package }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% elif forloop.counter > 2 and forloop.counter <= 9 %}
+
+
+
{{ tier.name }}
+ ${{ tier.amount }}
+
{{ tier.details | markdown | safe }}
+
+
+ {% if tier.benefits.exists %}
+
Highlights of this package:
+ {% for benefit in tier.benefits.all %}
+
{{ benefit.description | markdown | safe }}
+ {% endfor %}
+ {% endif %}
+
+ {% if tier.additional_resources.exists %}
+
This package also includes:
+
+ {% for additional_resource in tier.additional_resources.all %}
+ {{ additional_resource.package }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% else %}
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/sponsors/detail.html b/templates/2025/sponsors/detail.html
new file mode 100644
index 00000000..9dd7ca3b
--- /dev/null
+++ b/templates/2025/sponsors/detail.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+
+{% block content %}
+
{{ sponsor.name }}
+
+
{{ sponsor.biography|safe }}
+
+ {% if sponsor.logo %}
+
+ {% endif %}
+
+
+{% endblock %}
diff --git a/templates/2025/sponsors/home_sponsors.html b/templates/2025/sponsors/home_sponsors.html
new file mode 100644
index 00000000..e2d5dbc6
--- /dev/null
+++ b/templates/2025/sponsors/home_sponsors.html
@@ -0,0 +1,62 @@
+{% load static %}
+
+
+
+
diff --git a/templates/2025/sponsors/prospectus.html b/templates/2025/sponsors/prospectus.html
new file mode 100644
index 00000000..f81d2600
--- /dev/null
+++ b/templates/2025/sponsors/prospectus.html
@@ -0,0 +1,15 @@
+{% extends "base2.html" %}
+{% block content %}
+
+
+
+
+
Our Prospectus
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/sponsors/sponsors.html b/templates/2025/sponsors/sponsors.html
new file mode 100644
index 00000000..f68c7302
--- /dev/null
+++ b/templates/2025/sponsors/sponsors.html
@@ -0,0 +1,724 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Sponsors || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
+
+ {% for tier in sponsorship_tiers %}
+ {% if tier.sponsors.exists %}
+ {% if not tier.show_in_grid %}
+
+
+
+
+ {{ tier.name }}
+
+
+
+
+ {% for sponsor in tier.sponsors %}
+ {% if sponsor.show_biography %}
+
+
+
+
+
+
+
+
+
+
+
+
{{ sponsor.biography | markdown | safe }} {{ form.media }}
+
+ {% if sponsor.website %}
+
Visit website
+ {% endif %}
+
+
+
+
+ {% else %}
+
+
+
+
+
+
+
+
+
+ {% endif %}
+ {% endfor %}
+
+
+
+
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+
+
+ {% for tier in sponsorship_tiers %}
+ {% if tier.sponsors.exists %}
+ {% if tier.show_in_grid %}
+
+
+
+ {{ tier.name }}
+
+
+
+ {% for sponsor in tier.sponsors %}
+
+ {% if sponsor.website %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+
+
+ {% if no_sponsors %}
+
+
+
+ Who’s on First in Sponsoring PyCon Africa 2024? It Could Be You!
+
+
Currently, our sponsor lineup is as invisible as a well-written line of Python code!
+
Consider becoming a sponsor to gain visibility among a vibrant community of Python enthusiasts and to help make PyCon Africa 2024 a success.
+ Take a look at our PROSPECTUS or Contact us at sponsorship@pycon.africa to find out how you can help.
+
Stay tuned! The grand reveal of our 2024 sponsors will be worth the wait.
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+ {% if diamond %}
+
+
+
+
+
+
+ {% for sponsor in diamond %}
+ {% if sponsor.is_visible %}
+
+
+
+ {% if sponsor.show_biography %}
+
+
+
+
+ {% else %}
+
+
+
+
+ {% endif %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+ {% for sponsor in diamond %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+ {% if gold %}
+
+
+
+
+
+
+
+
+ {% for sponsor in gold %}
+ {% if sponsor.is_visible %}
+
+ {% if sponsor.show_biography %}
+
+
+
+ {% else %}
+
+
+
+
+ {% endif %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+ {% for sponsor in gold %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+ {% if silver%}
+
+
+
+
+
+
+
+ {% for sponsor in silver %}
+ {% if sponsor.is_visible %}
+
+ {% if sponsor.show_biography %}
+
+
+
+ {% else %}
+
+
+
+
+ {% endif %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+ {% for sponsor in silver %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+ {% if bronze %}
+
+
+
+
+
+
+
+
+
+ {% for sponsor in bronze %}
+ {% if sponsor.is_visible %}
+
+ {% if sponsor.show_biography %}
+
+
+
+ {% else %}
+
+
+
+
+ {% endif %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% endfor %}
+
+ {% for sponsor in bronze %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+ {% if other %}
+
+
+
+
+
+
+
+
+
+ {% for sponsor in other %}
+
+ {% endfor %}
+
+
+
+
+
+ {% if individual %}
+
+
+
+ {% for sponsor in individual %}
+
+ {% endfor %}
+
+
+
+ {% endif %}
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/talks/accepted_talks.html b/templates/2025/talks/accepted_talks.html
new file mode 100644
index 00000000..8045a1a9
--- /dev/null
+++ b/templates/2025/talks/accepted_talks.html
@@ -0,0 +1,124 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Speakers || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Speakers
+
Home /Speakers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Announcing the PyCon Africa 2018 Talk Lineup!
+
We'll publish the schedule including time slots as soon as it is finalized!
+
+ {% if accepted_talks %}
+
Attending to PyCon Africa 2018? Here are some of the talks to look forward to:
+ {% for talk in accepted_talks %}
+
{{ talk.title }} - {{ talk.user.name }}
+ {{ talk.user.profile.last_name }}
+ {% endfor %}
+
+
+
+ {% else %}
+
We haven't accepted any talks yet. We will update this page as soon as we have closed our CFP and
+ accepted submitted talks.
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% if request.user.is_superuser %}
+
+
+
+ {% for speaker in speakers %}
+
+ {% if speaker.is_visible %}
+
+
+
+
+
+
+
+ {% if speaker.organization %}
+ {{ speaker.profession }} at {{ speaker.organization }}
+ {% else %}
+ {{ speaker.profession }}
+ {% endif %}
+
+
+
+
+
+
+
+ {% else %}
+
+ {% endif %}
+ {% empty %}
+
There is nothing in this list
+ {% endfor %}
+
+
+
+
+
+ {% else %}
+
Speaker will be announced on the 8th of September 2022
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
\ No newline at end of file
diff --git a/templates/2025/talks/edit_talk.html b/templates/2025/talks/edit_talk.html
new file mode 100644
index 00000000..de075d2c
--- /dev/null
+++ b/templates/2025/talks/edit_talk.html
@@ -0,0 +1,156 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Edit your Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Edit: {{ proposal.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Edit: {{ proposal.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/invitation_list.html b/templates/2025/talks/invitation_list.html
new file mode 100644
index 00000000..b1665aac
--- /dev/null
+++ b/templates/2025/talks/invitation_list.html
@@ -0,0 +1,25 @@
+{% if invitations %}
+
+
+
+
+
+
+
+
You've been invited to join the following session
+
+
+ {% for invitation in invitations %}
+
+ {% endfor %}
+
+
+
+{% else %}
+{% endif %}
\ No newline at end of file
diff --git a/templates/2025/talks/invited_speaker_talk_form.html b/templates/2025/talks/invited_speaker_talk_form.html
new file mode 100644
index 00000000..f8221917
--- /dev/null
+++ b/templates/2025/talks/invited_speaker_talk_form.html
@@ -0,0 +1,95 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Submit your Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
Submit your new Talk
+
Home /Talks /Submit your Talk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello there! You have access to this page because you were invited to submit a proposal. Kindly submit your proposal below {% firstof user.get_short_name user.get_username %} 😊
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/model_form_upload.html b/templates/2025/talks/model_form_upload.html
new file mode 100644
index 00000000..4b993ac4
--- /dev/null
+++ b/templates/2025/talks/model_form_upload.html
@@ -0,0 +1,11 @@
+{% extends 'base2.html' %}
+
+{% block content %}
+
+
+
Return to home
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/talks/proposal_response_form.html b/templates/2025/talks/proposal_response_form.html
new file mode 100644
index 00000000..be3fb720
--- /dev/null
+++ b/templates/2025/talks/proposal_response_form.html
@@ -0,0 +1,154 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Response to your Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Response to: {{ proposal.title|truncatewords:7 }}
+
+
+ Home
+ /
+
+
+ Profile
+ /
+
+
+ Proposal(s)
+ /
+
+
+ Response to: {{ proposal.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Respond to Your Proposal Invitation
+
We are excited to have you participate in PyCon Africa 2024! Please confirm your availability by accepting or rejecting the invitation below. If you accept, you will receive further instructions regarding the next steps and preparation. Should you decide to decline, we appreciate your time and consideration.
+
+
Proposal: {{ proposal.title }}
+
+ {% if proposal.status == 'A' and proposal.user_response == 'P' %}
+
+ {% else %}
+
Your response: {{ proposal.get_user_response_display }}
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/proposing_a_talk.html b/templates/2025/talks/proposing_a_talk.html
new file mode 100644
index 00000000..c968ae35
--- /dev/null
+++ b/templates/2025/talks/proposing_a_talk.html
@@ -0,0 +1,76 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Proposing a Talk || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
Proposing a Talk
+
+
+
+ Home
+ /
+
+
+ Proposing a Talk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if user.is_authenticated %}
+ Hello{% if user.is_authenticated %} {% if request.user.user_profile %}{{ request.user.user_profile.name }}{% else %}@{{ request.user.username }}{% endif %}{% else %}{% endif %}, we are glad you are interested in speaking at PyCon Africa!
+ {% else %}
+ We are glad you are interested in speaking at PyCon Africa!
+ {% endif %}
+
+
+
+
+ {% for proposing_talk in proposing_talks.all|slice:"0:1" %}
+
{{ proposing_talk.content | markdown | safe }}
+ {{ form.media }}
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/recordings.html b/templates/2025/talks/recordings.html
new file mode 100644
index 00000000..239c2d9d
--- /dev/null
+++ b/templates/2025/talks/recordings.html
@@ -0,0 +1,60 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Recording Release || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Recording Release
+
+
+
+ Home
+ /
+
+
+ Recording Release
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% for recording in recordings.all|slice:"0:1" %}
+
+ {{ recording.title }}
+
+
+
+
+
{{ recording.content | markdown | safe }}
+ {{ form.media }}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/talks/reviews/review_success.html b/templates/2025/talks/reviews/review_success.html
new file mode 100644
index 00000000..9b608443
--- /dev/null
+++ b/templates/2025/talks/reviews/review_success.html
@@ -0,0 +1,150 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Talk Reviewed Review Successfully || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Proposal Review: {{ talk.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Review Submitted Successfully!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/reviews/reviewed_talks_by_category.html b/templates/2025/talks/reviews/reviewed_talks_by_category.html
new file mode 100644
index 00000000..0029abf6
--- /dev/null
+++ b/templates/2025/talks/reviews/reviewed_talks_by_category.html
@@ -0,0 +1,211 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Talk Reviewed Review Successfully || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Proposal Review: {{ talk.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Reviewed Proposals based on Category
+
+
+
+
+
+
+ {% for category, talks in category_talks_scores %}
+
+ {{ category }}
+
+ {% endfor %}
+
+
+
+
+
+ {% for category, talks in category_talks_scores %}
+
+
+
+
+
+
+ Rank
+ Title
+ Session
+ Audience
+ Current Average Score
+ Multiple Submissions
+ Name
+
+
+
+
+ {% for talk in talks %}
+
+ {{ talk.rank }}
+
+ {{ talk.title }}
+
+
+ {{ talk.talk_type }}
+
+
+ {{ talk.intended_audience }}
+
+
+ {{ talk.avg_score|floatformat:2 }}
+
+
+ {% if talk.submission_count > 1 %}Yes{% else %}No{% endif %} ({{ talk.submission_count }})
+ {{ talk.user.user_profile.name }} {{ talk.user.user_profile.surname }}
+
+ {% empty %}
+ You are yet to review a proposal.
+ {% endfor %}
+
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/reviews/reviewed_talks_by_type.html b/templates/2025/talks/reviews/reviewed_talks_by_type.html
new file mode 100644
index 00000000..659d500d
--- /dev/null
+++ b/templates/2025/talks/reviews/reviewed_talks_by_type.html
@@ -0,0 +1,207 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Talk Reviewed Review Successfully || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Proposal Review: {{ talk.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Reviewed Proposals based on Talk Type
+
+
+
+
+
+
+ {% for talk_type, talks in type_talks_scores %}
+
+ {{ talk_type }}
+
+ {% endfor %}
+
+
+
+
+
+ {% for talk_type, talks in type_talks_scores %}
+
+
+
+
+
+
+ Rank
+ Title
+ Session
+ Audience
+ Current Average Score
+ Multiple Submissions
+ Name
+
+
+
+
+ {% for talk in talks %}
+
+ {{ talk.rank }}
+
+ {{ talk.title }}
+
+
+ {{ talk.talk_type }}
+
+
+ {{ talk.intended_audience }}
+
+
+ {{ talk.avg_score|floatformat:2 }}
+
+
+ {% if talk.submission_count > 1 %}Yes{% else %}No{% endif %} ({{ talk.submission_count }})
+ {{ talk.user.user_profile.name }} {{ talk.user.user_profile.surname }}
+
+ {% empty %}
+ You are yet to review a proposal.
+ {% endfor %}
+
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/talks/reviews/talk_list.html b/templates/2025/talks/reviews/talk_list.html
new file mode 100644
index 00000000..fd51927e
--- /dev/null
+++ b/templates/2025/talks/reviews/talk_list.html
@@ -0,0 +1,289 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Review Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Review Proposals
+
+
+
+ {% if messages %}
+ {% for message in messages %}
+
{{ message }}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if not no_reviewer_rights %}
+
Proposals Awaiting Review
+
+
+
+
+ {% for talk_type, talks in talks_by_type.items %}
+
+ {{ talk_type }}
+
+ {% endfor %}
+
+
+
+
+ {% for talk_type, talks in talks_by_type.items %}
+
+
+
+ {% if talks %}
+
+
+ Title
+ Session
+ Audience
+ Actions
+
+
+
+ {% for talk in talks %}
+
+
+ {{ talk.title }}
+
+
+ {{ talk.talk_type }}
+
+
+ {{ talk.intended_audience }}
+
+
+ Review
+
+
+ {% endfor %}
+
+ {% else %}
+ There are no proposals pending review.
+ {% endif %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
Proposals ReviewedThis list of proposals includes the average score from all reviewers' ratings.
+
+
+
+
+
+
+
+
+
+
+
+ {% if talks_reviewed_with_scores %}
+
+
+ Title
+
+
+
+ Session
+ Audience
+ Current Average Score
+
+
+
+
+ {% for talk, avg_score in talks_reviewed_with_scores %}
+
+
+ {{ talk.title }}
+
+
+ {{ talk.talk_type }}
+
+
+ {{ talk.intended_audience }}
+
+
+ {{ avg_score|floatformat:2 }}
+
+
+
+ {% empty %}
+ You are yet to review a proposal.
+ {% endfor %}
+
+ {% else %}
+ You are yet to review a proposal.
+ {% endif %}
+
+
+
+
+
+
+ {% else %}
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/reviews/talk_review.html b/templates/2025/talks/reviews/talk_review.html
new file mode 100644
index 00000000..7d7926a4
--- /dev/null
+++ b/templates/2025/talks/reviews/talk_review.html
@@ -0,0 +1,192 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Review Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Proposal Review: {{ talk.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if already_reviewed %}
+
You have already reviewed this proposal.
+
+ {% else %}
+
+
+
+
+
+
+
{{ talk.title }}
+
+
Proposal Category : {{ talk.talk_category }}
+
+
Proposal Type : {{ talk.talk_type }}
+
Intended Audience : {{ talk.intended_audience }}
+
+
+
+
+
+
+
+
+
Elevator Pitch : {{ talk.elevator_pitch | markdown | safe }}
+
+
Abstract : {{ talk.talk_abstract | markdown | safe }}
+
Something the Applicant wants you to know : {% if talk.anything_else_you_want_to_tell_us %} {{ talk.anything_else_you_want_to_tell_us | markdown | safe }} {% else %} Applicant had nothing to say here {% endif %}
+
+
Talk Preview :
+ {% if talk.link_to_preview_video_url %}
+
+
+
+ {% video talk.link_to_preview_video_url 'tiny' %}
+
+
+
+ {% else %}
+
+
+ {% endif %}
+
Submission Date: {{ talk.created_date|date:"Y-m-d" }}
+
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/reviews/talk_review_detail.html b/templates/2025/talks/reviews/talk_review_detail.html
new file mode 100644
index 00000000..027b310a
--- /dev/null
+++ b/templates/2025/talks/reviews/talk_review_detail.html
@@ -0,0 +1,151 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Review Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2024/navbar.html' %}
+
+
+
+
+
+
+
Proposal Review: {{ proposal.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ talk.title }}
+
+
{{ talk.description }}
+
+
+ {% if reviews %}
+
Reviews
+
+ {% for review in reviews %}
+ {{ review.reviewer.user.username }} rated this talk {{ review.score }}: "{{ review.comments }}"
+ {% endfor %}
+
+
Average Score: {{ average_score }}
+
Status: {{ "Accepted" if is_accepted else "Rejected" }}
+ {% else %}
+
No reviews have been submitted yet.
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/simple_upload.html b/templates/2025/talks/simple_upload.html
new file mode 100644
index 00000000..ca70050a
--- /dev/null
+++ b/templates/2025/talks/simple_upload.html
@@ -0,0 +1,17 @@
+{% extends 'base2.html' %}
+
+{% load static %}
+
+{% block content %}
+
+
+ {% if uploaded_file_url %}
+
File uploaded at: {{ uploaded_file_url }}
+ {% endif %}
+
+
Return to home
+{% endblock %}
\ No newline at end of file
diff --git a/templates/2025/talks/speaker_invite_error.html b/templates/2025/talks/speaker_invite_error.html
new file mode 100644
index 00000000..126e1696
--- /dev/null
+++ b/templates/2025/talks/speaker_invite_error.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+
+{% block content %}
+
+ {% if error %}
+
+ {{ error }}
+
+ {% else %}
+
This page is used to send invitations to potential speakers. Please use the form provided to submit an invitation.
+ {% endif %}
+
+{% endblock %}
diff --git a/templates/2025/talks/success.html b/templates/2025/talks/success.html
new file mode 100644
index 00000000..0359d633
--- /dev/null
+++ b/templates/2025/talks/success.html
@@ -0,0 +1,149 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Submission Successful || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
Proposal Submission Successful
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ×
+
+
+
+ Hey {% if request.user.user_profile %}{{ request.user.user_profile.name}}{% else %}@{{ request.user.username }}{% endif %}, your talk submission was successful.
+
+
Thank you for submitting your proposal. Our organising team will get back to you.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/talk.html b/templates/2025/talks/talk.html
new file mode 100644
index 00000000..83ccf7eb
--- /dev/null
+++ b/templates/2025/talks/talk.html
@@ -0,0 +1,93 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Submit your Talk || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
Edit: {{ talk.title}}
+
Home /Talks /{{ talk.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Edit your talk - {{ talk.title}} below.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/talks/talk_details.html b/templates/2025/talks/talk_details.html
new file mode 100644
index 00000000..97aa39fa
--- /dev/null
+++ b/templates/2025/talks/talk_details.html
@@ -0,0 +1,413 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags markdown_extras embed_video_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Talk Detail || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
+
{{ talk.title|truncatewords:7 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if request.user.username == talk.user.username %}
+
+
+
+
{{ talk.title }} will be presented by {% if talk.user.user_profile.name %}{{ talk.user.user_profile.name }} {{ talk.user.user_profile.surname }}{% else %}@{{ talk.user.username|capfirst }}{% endif %}
+
+
+
+ Talk Type: {{ talk.talk_type }}
+ Talk Category : {{ talk.talk_category }}
+ Intended Audience : {{ talk.intended_audience }}
+ {% if speakers %}
+ Added Speaker(s) :
+ {% for speaker in speakers %}
+ {{ speaker.user_profile.name }} {{ speaker.user_profile.surname }} |
+ {% endfor %}
+ {% else %}
+ {% endif %}
+ {% if talk.status == "S" %}
+
Status: Currently under Review
+ {% elif talk.status == "A" %}
+
+
+
+ ×
+
+
+
+
+
+
+
+ Congratulations {% if talk.user.user_profile.name %}{{ talk.user.user_profile.name }}{% else %}@{{ talk.user.username|capfirst }}{% endif %}! This talk has been Accepted.
+
+
+
+
+ {% elif talk.status == "W" %}
+
Status: On Waitlist
+ {% elif talk.status == "R" %}
+
Status: Sorry, You didn't make the cut
+ {% elif talk.status == "RS" %}
+
Status: Sorry to see you won't be able to join us present your proposal.
+ {% endif %}
+
+ {% if talk.user_response == "P" %}
+ {% elif talk.user_response == "A" %}
+
You've Accepted to Present
+ {% elif talk.user_response == "R" %}
+
Rejected to Present
+ {% endif %}
+
+
+
+
Add Speakers to This Talk
+
+
+
+
+
+
+
+
Enter the speaker's email address:
+ (Make sure the person you are inviting already have an account on this website.)
+
+
+
+
+
+
+
+ {% if can_upload %}
+
+ {% if has_uploaded_slide %}
+
+
+
+ My Slides
+
+
+
+
+
+ {% else %}
+
+
+
Upload Slides
+
+ {% endif %}
+
+ {% else %}
+ {% endif %}
+
+
+
+
+
+
+
Upload Slides
+
+
+
+
+
+
+
+
Talk Preview :
+ {% if talk.link_to_preview_video_url %}
+
+
+
+ {% video talk.link_to_preview_video_url 'tiny' %}
+
+
+
+ {% else %}
+
+
+ {% endif %}
+
Elevator Pitch : {{ talk.elevator_pitch | markdown | safe }}
+
+
Abstract : {{ talk.talk_abstract | markdown | safe }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% else %}
+
+
+
+
+
{{ talk.title }} will be presented by {% if talk.user.user_profile.name %}{{ talk.user.user_profile.name }} {{ talk.user.user_profile.surname }}{% else %}@{{ talk.user.username|capfirst }}{% endif %}
+
+
+
+
You will be joining this session
+
+
+
+
+
+
+ Talk Type: {{ talk.talk_type }}
+ Talk Category : {{ talk.talk_category }}
+ Intended Audience : {{ talk.intended_audience }}
+
+ {% if talk.status == "S" %}
+
Status: Currently under Review
+ {% elif talk.status == "A" %}
+
+
+
+ ×
+
+
+
+
+
+
+
+ Congratulations {% if talk.user.user_profile.name %}{{ talk.user.user_profile.name }}{% else %}@{{ talk.user.username|capfirst }}{% endif %}! This talk has been Accepted.
+
+
+
+
+ {% elif talk.status == "W" %}
+
Status: On Waitlist
+ {% elif talk.status == "R" %}
+
Status: Sorry, You didn't make the cut
+ {% elif talk.status == "RS" %}
+
Status: You rejected to present.
+ {% endif %}
+
+
+
+
+
+
+
Talk Preview :
+ {% if talk.link_to_preview_video_url %}
+
+
+
+ {% video talk.link_to_preview_video_url 'tiny' %}
+
+
+
+ {% else %}
+
+
+ {% endif %}
+
Elevator Pitch : {{ talk.elevator_pitch | markdown | safe }}
+
+
Abstract : {{ talk.talk_abstract | markdown | safe }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
\ No newline at end of file
diff --git a/templates/2025/talks/talk_form.html b/templates/2025/talks/talk_form.html
new file mode 100644
index 00000000..fa1b4f78
--- /dev/null
+++ b/templates/2025/talks/talk_form.html
@@ -0,0 +1,248 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Submit your Talk || PyCon Africa" %}{% endif %}{% endblock %}
+{% trans 'cur_time' as datetime.datetime.now(tz=pytz.timezone(str(settings.TIME_ZONE))) %}
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
Submit Your Talk
+
+
+ Home
+ /
+
+
+ Profile
+ /
+
+
+ Submit Your Talk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if active_period or is_sponsor_or_keynote %}
+
Submit Your Talk
+
+ {% if is_sponsor_or_keynote %}
+
+ {% endif %}
+
+ {% if active_period %}
+
+ {% endif %}
+
+
+ {% if form.non_field_errors %}
+
+
+ {% for error in form.non_field_errors %}
+ {{ error }}
+ {% endfor %}
+
+
+ {% endif %}
+
+
+ {% for field in form %}
+ {% if field.errors %}
+
+ {{ field.label }}:
+ {{ field.errors|striptags }}
+
+ {% endif %}
+ {% endfor %}
+
+
+
+{% elif upcoming_period %}
+
🌟 Mark your calendars for our CFP! 🌟
+
+ We can see you are ready to go! Got a Python project, insight, or innovation you're eager to share? This is your moment to shine!
+
+ Get ready to ignite your ideas because our Call for Proposals kicks off on {{ upcoming_period.start_date }} (GMT) and runs until {{ upcoming_period.end_date }} (GMT) .
+
+ So stay tuned and reload this page on the due date. Let's make waves together this year! 🚀
+
+{% else %}
+
🚀 The PyCon Africa's Call for Proposals is now Wrapped Up!
+
+
+
+
+{% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/talk_list.html b/templates/2025/talks/talk_list.html
new file mode 100644
index 00000000..21c26b41
--- /dev/null
+++ b/templates/2025/talks/talk_list.html
@@ -0,0 +1,213 @@
+{% extends "base.html" %}
+{% load i18n static avatar_tags crispy_forms_tags %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Submitted Talks || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
+
{% if user_profile %}{{ request.user.user_profile.name }} {% else %}{% firstof user.get_short_name user.get_username|capfirst %}{% endif %} Proposal(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if submitted_talks %}
+
+
+
+
+
+
+
+
+
+ Title
+
+
+
+ Session
+ Audience
+ Status
+ Actions
+
+
+
+
+ {% for talk in submitted_talks %}
+
+
+ {{ talk.title }}
+
+
+ {{ talk.talk_type }}
+
+
+ {{ talk.intended_audience }}
+
+
+ {% if talk.status == "S" %}
+
+ Under Review
+ {% elif talk.status == "A" %}
+ Accepted
+ {% elif talk.status == "W" %}
+ On Waitlist
+ {% elif talk.status == "R" %}
+ Didn't make the cut
+ {% elif talk.status == "RS" %}
+ You rejected to present
+ {% endif %}
+
+
+
+ View
+ {% if active_period %}
+ Edit
+ {% elif talk.user_response == 'A' %}
+ Edit
+ {% else %}
+ Edit
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+ {% else %}
+
+
You have not submitted any Talk yet, Please click the button below to create your First Proposal.
+
+
Submit a new Talk
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/talk_sidebar_navigation.html b/templates/2025/talks/talk_sidebar_navigation.html
new file mode 100644
index 00000000..17557236
--- /dev/null
+++ b/templates/2025/talks/talk_sidebar_navigation.html
@@ -0,0 +1,40 @@
+
+
+
+ <-- Overall -->
+
+ My Profile
+
+
+
+
+
+ Update my Profile
+
+
+
+
+
+ Change Password
+
+
+
+
+
+ My Submitted Talks
+
+
+
+
+
+ Submit a new Talk
+
+
\ No newline at end of file
diff --git a/templates/2025/talks/talks.html b/templates/2025/talks/talks.html
new file mode 100644
index 00000000..69b38493
--- /dev/null
+++ b/templates/2025/talks/talks.html
@@ -0,0 +1,58 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Speak at PyCon Africa || PyCon Africa" %}{% endif %}{% endblock %}
+
+
+{% block content %}
+
+
+{% include '2025/navbar.html' %}
+
+
+
+
+
+
+
Speak at PyCon Africa
+
+
+
+ Home
+ /
+
+
+ Speak at PyCon Africa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thank you{% if user.is_authenticated %} {% if request.user.user_profile %}{{ request.user.user_profile.name }} {% else %}@{{ request.user.username }}{% endif %} {% else %} {% endif %} for wanting to Speak at PyCon Africa!
+
+
+ {% for speak in speaks.all|slice:"0:1" %}
+
{{ speak.content | markdown | safe }}
+ {{ form.media }}
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/2025/talks/upload_success.html b/templates/2025/talks/upload_success.html
new file mode 100644
index 00000000..e69de29b
diff --git a/templates/2025/talks/user_talks_summary.html b/templates/2025/talks/user_talks_summary.html
new file mode 100644
index 00000000..f055c32b
--- /dev/null
+++ b/templates/2025/talks/user_talks_summary.html
@@ -0,0 +1,70 @@
+{% if submitted_talks.exists %}
+
+{% elif invited_talks.exists %}
+
+
+{% else %}
+
+{% endif %}
\ No newline at end of file
diff --git a/templates/2025/tickets/tickets.html b/templates/2025/tickets/tickets.html
new file mode 100644
index 00000000..06a9cdb2
--- /dev/null
+++ b/templates/2025/tickets/tickets.html
@@ -0,0 +1,117 @@
+{% extends "base.html" %}
+{% load i18n static markdown_extras %}
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Tickets | PyCon Africa" %}{% endif %}{% endblock %}
+
+{% block title %}{{ meta_title }}{% endblock %}
+{% block description %}{{ meta_description }}{% endblock %}
+{% block author %}{{ meta_author }}{% endblock %}
+
+{% block og_title %}{{ meta_title }}{% endblock %}
+{% block og_description %}{{ meta_description }}{% endblock %}
+{% block og_image %}{{ meta_og_image }}{% endblock %}
+{% block og_url %}{{ request.build_absolute_uri }}{% endblock %}
+{% block og_type %}website{% endblock %}
+{% block og_site_name %}PyCon Africa{% endblock %}
+
+{% block twitter_title %}{{ meta_title }}{% endblock %}
+{% block twitter_description %}{{ meta_description }}{% endblock %}
+{% block twitter_image %}{{ meta_og_image }}{% endblock %}
+{% block twitter_site %}@PyConAfrica{% endblock %}
+
+{% block content %}
+{% include '2024/navbar.html' %}
+
+
+
+
+
Tickets
+
+
+
+ Home
+ /
+
+
+ About
+ /
+
+
+ Tickets
+
+
+
+
+
+
+
+
+
+
+ {% for ticket in tickets.all|slice:"0:1" %}
+
+
+ {{ ticket.ticket_title }}
+
+
+
+
+
{{ ticket.section_one | markdown | safe }}
+
+
+
+
+
+
+
+ Register to Attend Pycon Africa!
+
+
{{ ticket.section_two | markdown | safe }}
+
+
+
+
+ {% if ticket.donation_link %}
+
+
+
+ {{ ticket.embedded_codes | markdown | safe }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Can't attend but still want to support? Donate below!
+
+
+
+
+
+
+ {% else %}
+
+
+
+ {{ ticket.embedded_codes | markdown | safe }}
+
+
+
+ {% endif %}
+
+
+
+ {% endfor %}
+
+
+
+
+{% endblock %}
diff --git a/templates/base.html b/templates/base.html
index 2ff1efdf..c5002ae7 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -61,10 +61,10 @@
-
+
-
+
@@ -82,7 +82,7 @@
{% endblock %}
- {% include '2024/footer.html' %}
+ {% include '2025/footer.html' %}
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -158,7 +158,7 @@
-
+
-
+
-
+
-
+