diff --git a/dev.requirements.txt b/dev.requirements.txt new file mode 100644 index 00000000..62493e12 --- /dev/null +++ b/dev.requirements.txt @@ -0,0 +1,29 @@ +django==5.0.3 +cloudinary==1.39.1 +django-grappelli==3.0.8 +django-cloudinary-storage==0.3.0 +django-gamma-cloudinary==0.2.3 +django-avatar==8.0.0 +django-crispy-forms==2.1 +crispy-bootstrap5==2024.2 +django-recaptcha==4.0.0 +django-slugify-processor==1.6.0 +django-countries==7.6 +django-summernote==0.8.20.0 +django-extensions==3.2.3 +django-robohash-svg==0.9.5 +django-embed-video==1.4.9 +django-imagekit==5.0.0 +django-import-export==3.3.7 +djangorestframework==3.15.1 +django-tinymce==4.0.0 +sorl-thumbnail==12.10.0 +django-markdownx==4.0.7 +django-hitcount==1.3.5 +django-taggit==5.0.1 +django-thumbs-v2==0.4.1 +django-simple-history==3.5.0 +hashids==1.3.1 +django-hashid-field==3.4.0 +django-next-prev==1.1.0 +pytz==2024.1 \ No newline at end of file diff --git a/pyconafrica/settings.py b/pyconafrica/settings.py index 64931b2c..c93aaff0 100644 --- a/pyconafrica/settings.py +++ b/pyconafrica/settings.py @@ -36,8 +36,6 @@ # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ -ALLOWED_HOSTS = ["*"] - LOGIN_REDIRECT_URL = "/accounts/profile/" SIGNUP_REDIRECT_URL = "/accounts/profile/" LOGOUT_REDIRECT_URL = "/" @@ -212,9 +210,9 @@ os.path.join(BASE_DIR, 'static') ] - +# if not os.environ.get("DEBUG"): #STATICFILES_STORAGE = 'gamma_cloudinary.storage.StaticCloudinaryStorage' -DEFAULT_FILE_STORAGE = 'gamma_cloudinary.storage.CloudinaryStorage' +# DEFAULT_FILE_STORAGE = 'gamma_cloudinary.storage.CloudinaryStorage' # Absolute filesystem path to the directory that will hold user-uploaded files. diff --git a/registration/models.py b/registration/models.py index 0c7e3ed7..0892eddc 100644 --- a/registration/models.py +++ b/registration/models.py @@ -1,11 +1,9 @@ -from avatar.models import Avatar import datetime import hashlib import logging import re import string import warnings -import magic from django.utils import timezone from django.apps import apps @@ -26,9 +24,6 @@ from .users import UserModelString from .utils import _ -from taggit.managers import TaggableManager -from django.utils.deconstruct import deconstructible -from django.template.defaultfilters import filesizeformat from markdownx.models import MarkdownxField logger = logging.getLogger(__name__) @@ -40,33 +35,16 @@ from django_extensions.db.fields import AutoSlugField from django_slugify_processor.text import slugify -from imagekit.models import ProcessedImageField -from imagekit.processors import ResizeToFit -from six import python_2_unicode_compatible - -# Included by me (3rd Parties and more) -from django.utils.encoding import smart_str -from django.contrib.auth import hashers - -from PIL import Image, ImageDraw +from PIL import Image cfgDefaultImageResample = Image.BICUBIC # Image.LANCZOS from django.utils.translation import gettext_lazy as _ from django.urls import reverse from django.contrib.auth.models import User -from django.db.models.signals import post_save -from django.dispatch import receiver -from io import BytesIO import logging -from django.core.files.base import ContentFile -from django_thumbs.fields import ImageThumbsField -from simple_history.models import HistoricalRecords -import os -from django.utils import timezone -from django.core.validators import MaxLengthValidator -from avatar.models import AvatarField +from django.utils import timezone from django_countries.fields import CountryField @@ -76,13 +54,9 @@ from hitcount.views import HitCountMixin from django.contrib.contenttypes.fields import GenericRelation -from django_recaptcha.fields import ReCaptchaField -from hashids import Hashids from django.conf import settings from hashid_field import HashidAutoField -from hashid_field import HashidField - def get_from_email(site=None): diff --git a/static/2020/js/.idea/js.iml b/static/2020/js/.idea/js.iml deleted file mode 100644 index d6ebd480..00000000 --- a/static/2020/js/.idea/js.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/static/2020/js/.idea/misc.xml b/static/2020/js/.idea/misc.xml deleted file mode 100644 index 28a804d8..00000000 --- a/static/2020/js/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/static/2020/js/.idea/modules.xml b/static/2020/js/.idea/modules.xml deleted file mode 100644 index 25881583..00000000 --- a/static/2020/js/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/static/2020/js/.idea/workspace.xml b/static/2020/js/.idea/workspace.xml deleted file mode 100644 index 3a2f9c01..00000000 --- a/static/2020/js/.idea/workspace.xml +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523344407918 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/talks/migrations/0001_initial.py b/talks/migrations/0001_initial.py index 088b1e32..b51a93aa 100644 --- a/talks/migrations/0001_initial.py +++ b/talks/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.2 on 2024-09-06 14:11 +# Generated by Django 5.0.3 on 2025-02-02 10:34 import django.contrib.auth.models import django.db.models.deletion diff --git a/talks/templatetags/talks_tags.py b/talks/templatetags/talks_tags.py index 0b8c0ae0..90deec4a 100644 --- a/talks/templatetags/talks_tags.py +++ b/talks/templatetags/talks_tags.py @@ -5,7 +5,7 @@ register = template.Library() -@register.inclusion_tag('2024/talks/user_talks_summary.html') +@register.inclusion_tag('2025/talks/user_talks_summary.html') def user_talks_summary(user): # Attempt to find the current or next CFP period current_year = timezone.now().year @@ -32,7 +32,7 @@ def user_talks_summary(user): -@register.inclusion_tag('2024/talks/invitation_list.html', takes_context=True) +@register.inclusion_tag('2025/talks/invitation_list.html', takes_context=True) def invitation_list(context): request = context['request'] invitations = SpeakerInvitation.objects.filter(invitee=request.user, status='Pending') diff --git a/talks/views.py b/talks/views.py index 987b95ad..33da77f7 100644 --- a/talks/views.py +++ b/talks/views.py @@ -428,7 +428,7 @@ def send_speaker_invitation(request, year, pk): return redirect('talks:talk_details', year=year, pk=pk) else: # Handle the case for GET request or show an error message - return render(request, '2024/talks/speaker_invite_error.html', {'error': 'This action requires a POST request.'}) + return render(request, '2025/talks/speaker_invite_error.html', {'error': 'This action requires a POST request.'}) @login_required @@ -507,7 +507,7 @@ def list_talks_to_review(request, year): 'no_reviewer_rights': True } - return render(request, '2024/talks/reviews/talk_list.html', context) + return render(request, '2025/talks/reviews/talk_list.html', context) @login_required @permission_required('reviews.add_review', raise_exception=True) @@ -542,7 +542,7 @@ def review_talk(request, year, pk): else: form = ReviewForm() - return render(request, '2024/talks/reviews/talk_review.html', { + return render(request, '2025/talks/reviews/talk_review.html', { 'form': form, 'talk': talk, 'year': year, @@ -553,7 +553,7 @@ def review_talk(request, year, pk): def review_success(request, year): try: event_year = EventYear.objects.get(year=year) - return render(request, '2024/talks/reviews/review_success.html', {'year': year}) + return render(request, '2025/talks/reviews/review_success.html', {'year': year}) except EventYear.DoesNotExist: return HttpResponse("The specified event year does not exist.", status=404) @@ -598,7 +598,7 @@ def reviewed_talks_by_category(request, year): if talks.exists(): category_talks_scores.append((category_label, talks)) - return render(request, '2024/talks/reviews/reviewed_talks_by_category.html', { + return render(request, '2025/talks/reviews/reviewed_talks_by_category.html', { 'category_talks_scores': category_talks_scores, 'year': year }) @@ -643,7 +643,7 @@ def reviewed_talks_by_type(request, year): talk.rank = rank type_talks_scores.append((talk_type_label, talks)) - return render(request, '2024/talks/reviews/reviewed_talks_by_type.html', { + return render(request, '2025/talks/reviews/reviewed_talks_by_type.html', { 'type_talks_scores': type_talks_scores, 'year': year }) @@ -654,7 +654,7 @@ def reviewed_talks_by_type(request, year): @permission_required('reviews.add_review', raise_exception=True) class TalksToReviewListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): model = Proposal - template_name = '2024/talks/reviews/talk_list.html' + template_name = '2025/talks/reviews/talk_list.html' context_object_name = 'talks' permission_required = ('talks.view_talk',) @@ -673,7 +673,7 @@ def get_context_data(self, **kwargs): class ReviewTalkView(UpdateView): model = Review form_class = ReviewForm - template_name = '2024/talks/reviews/talk_review.html' + template_name = '2025/talks/reviews/talk_review.html' context_object_name = 'review' def get_object(self, queryset=None): @@ -693,7 +693,7 @@ def get_success_url(self): @permission_required('reviews.add_review', raise_exception=True) class TalkReviewDetailView(DetailView): model = Proposal - template_name = '2024/talks/reviews/talk_review_detail.html' + template_name = '2025/talks/reviews/talk_review_detail.html' context_object_name = 'talk' def get_context_data(self, **kwargs): diff --git a/templates/2024/navbar.html b/templates/2024/navbar.html index 91e1e576..663744f8 100644 --- a/templates/2024/navbar.html +++ b/templates/2024/navbar.html @@ -73,16 +73,16 @@
diff --git a/templates/2024/schedule/schedule.html b/templates/2024/schedule/schedule.html index 1ea188bf..2d973006 100644 --- a/templates/2024/schedule/schedule.html +++ b/templates/2024/schedule/schedule.html @@ -154,7 +154,7 @@
Keynote Speaker {% endif %} {% if schedule.fa_icon %} {% endif %} - | {{ schedule.talk.title }} + | {{ schedule.talk.title }}
{% endif %} diff --git a/templates/2024/schedule/schedule_home.html b/templates/2024/schedule/schedule_home.html index cffc7669..a62b9bab 100644 --- a/templates/2024/schedule/schedule_home.html +++ b/templates/2024/schedule/schedule_home.html @@ -73,7 +73,7 @@
Keynote Speaker {% endif %} {% if schedule.fa_icon %} {% endif %} - | {{ schedule.talk.title }} + | {{ schedule.talk.title }}
{% endif %} diff --git a/templates/2024/schedule/talk_details.html b/templates/2024/schedule/talk_details.html index fdb79220..e92b1930 100644 --- a/templates/2024/schedule/talk_details.html +++ b/templates/2024/schedule/talk_details.html @@ -251,7 +251,7 @@

Other Talks

{% endif %}
-

{{related_talk.title}}

+

{{related_talk.title}}

by {{ related_talk.user.user_profile.name }} {{ related_talk.user.user_profile.surname }} {% if related_talk.intended_audience == "BGN-L" %} diff --git a/templates/2024/speakers/speaker_details.html b/templates/2024/speakers/speaker_details.html index 78fc4593..ed112c40 100644 --- a/templates/2024/speakers/speaker_details.html +++ b/templates/2024/speakers/speaker_details.html @@ -182,7 +182,7 @@

Session(s) by {{ speaker.name|capfirst }}

- {{ talk.title }} + {{ talk.title }}
{{ schedules.start_time.time|time:"h:iA" }}
diff --git a/templates/2024/talks/edit_talk.html b/templates/2024/talks/edit_talk.html index f375d14f..de075d2c 100644 --- a/templates/2024/talks/edit_talk.html +++ b/templates/2024/talks/edit_talk.html @@ -24,7 +24,7 @@

Edit: {{ proposal.title|truncatew /
  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/proposal_response_form.html b/templates/2024/talks/proposal_response_form.html index 4150dbc4..be3fb720 100644 --- a/templates/2024/talks/proposal_response_form.html +++ b/templates/2024/talks/proposal_response_form.html @@ -24,7 +24,7 @@

    Response to: {{ proposal.title|tr /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/review_success.html b/templates/2024/talks/reviews/review_success.html index a22f20bd..9b608443 100644 --- a/templates/2024/talks/reviews/review_success.html +++ b/templates/2024/talks/reviews/review_success.html @@ -24,7 +24,7 @@

    Proposal Review: {{ talk.title|tr /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/reviewed_talks_by_category.html b/templates/2024/talks/reviews/reviewed_talks_by_category.html index 26c01410..0029abf6 100644 --- a/templates/2024/talks/reviews/reviewed_talks_by_category.html +++ b/templates/2024/talks/reviews/reviewed_talks_by_category.html @@ -24,7 +24,7 @@

    Proposal Review: {{ talk.title|tr /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/reviewed_talks_by_type.html b/templates/2024/talks/reviews/reviewed_talks_by_type.html index d7a3fefe..659d500d 100644 --- a/templates/2024/talks/reviews/reviewed_talks_by_type.html +++ b/templates/2024/talks/reviews/reviewed_talks_by_type.html @@ -24,7 +24,7 @@

    Proposal Review: {{ talk.title|tr /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/talk_list.html b/templates/2024/talks/reviews/talk_list.html index c8a93bf6..fd51927e 100644 --- a/templates/2024/talks/reviews/talk_list.html +++ b/templates/2024/talks/reviews/talk_list.html @@ -24,7 +24,7 @@

    Proposal Review

    /
  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/talk_review.html b/templates/2024/talks/reviews/talk_review.html index 06743f73..7d7926a4 100644 --- a/templates/2024/talks/reviews/talk_review.html +++ b/templates/2024/talks/reviews/talk_review.html @@ -24,7 +24,7 @@

    Proposal Review: {{ talk.title|tr /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/reviews/talk_review_detail.html b/templates/2024/talks/reviews/talk_review_detail.html index c07928ed..027b310a 100644 --- a/templates/2024/talks/reviews/talk_review_detail.html +++ b/templates/2024/talks/reviews/talk_review_detail.html @@ -24,7 +24,7 @@

    Proposal Review: {{ proposal.titl /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2024/talks/success.html b/templates/2024/talks/success.html index 25c3317d..e3b1466c 100644 --- a/templates/2024/talks/success.html +++ b/templates/2024/talks/success.html @@ -23,7 +23,7 @@

    Proposal Submission Successful/

  • - Submit Your Talk + Submit Your Talk /
  • diff --git a/templates/2024/talks/talk_details.html b/templates/2024/talks/talk_details.html index 055eefe5..648b523c 100644 --- a/templates/2024/talks/talk_details.html +++ b/templates/2024/talks/talk_details.html @@ -24,7 +24,7 @@

    {{ talk.title|truncatewords:7 }}< /

  • - Proposal(s) + Proposal(s) /
  • diff --git a/templates/2025/about/about.html b/templates/2025/about/about.html new file mode 100644 index 00000000..f377eb45 --- /dev/null +++ b/templates/2025/about/about.html @@ -0,0 +1,106 @@ +{% extends "base.html" %} +{% load i18n static markdown_extras %} +{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "About | PyCon Africa 2024" %}{% endif %}{% endblock %} + + + + + +{% block content %} +{% include '2024/navbar.html' %} + + + +
    +
    +

    About Us

    + +
      +
    • + Home + / +
    • +
    • + About Us +
    • +

    + +
    + +
    + + + + +
    +
    + {% for about in abouts.all|slice:"0:1" %} +
    + +
    +
    +
    +
    +
    + {{ about.about_tagline }} +

    {{ about.about_title }}

    +
    +
    +
    +
    +
    + + +


    +

    + {{ about.section_one_title }} +

    +

    + {{ about.section_one | markdown | safe }} + {{ form.media }} +

    +
    +
    + + + + + + + + {% if about.section_four %} + + {% else %} + {% endif %} + + {% endfor %} + + +
    +
    + + +{% endblock %} \ No newline at end of file diff --git a/templates/2025/about/teams.html b/templates/2025/about/teams.html new file mode 100644 index 00000000..d6840aee --- /dev/null +++ b/templates/2025/about/teams.html @@ -0,0 +1,197 @@ +{% extends "base.html" %} +{% load i18n static markdown_extras %} +{% block meta_title %} + {% if page %} + {{ page.meta_title }} + {% else %} + {% trans "Team || PyCon Ghana" %} + {% endif %} +{% endblock %} + +{% block content %} + + +{% include '2024/navbar.html' %} + + + +
    +
    +

    Team

    + +
    + +
    +
    + + + +
    +
    +
    +

    + PyCon Africa is organized by a multi-national team of volunteers on behalf of the global Python + programming community. This page will list all the committees and their members to highlight + their involvement with the PyCon Africa {{ event_year.year }} conference. +

    + +

    + Speaking of involvement: We can always use more help. If you’re interested, please send a mail to the  + PyCon Africa Team. Many thanks! +


    + +
    + +
    + + +
    +
    + +

    + + PyCon Africa {{ event_year.year }} International Organizing Committee Members + +

    +

    + We have an active team, with each member investing a lot of time into the organizing of PyCon Africa: +

    + + + +
    + +
    +

    + + PyCon Africa {{ event_year.year }} Local Organizing Committee Members + +

    + {% for item in loc_groups_with_members %} + + {% empty %} +

    No LOC groups available for this event year.

    + {% endfor %} + + +
    + +
    +

    + + Volunteers + +

    + {% for group in volunteer_groups %} +

    {{ group.name }}

    +
    + {% empty %} +

    Volunteer groups will be updated once they become available.

    + {% endfor %} +
    +
    + +
    +
    +
    + +{% endblock %} diff --git a/templates/2025/about/travel.html b/templates/2025/about/travel.html new file mode 100644 index 00000000..edae1ece --- /dev/null +++ b/templates/2025/about/travel.html @@ -0,0 +1,62 @@ +{% extends "base.html" %} +{% load i18n static markdown_extras %} +{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Travel Advice | PyCon Africa" %}{% endif %}{% endblock %} + + + + +{% block content %} +{% include '2024/navbar.html' %} + + + +
    +
    +

    Travel Advice

    + +
      +
    • + Home + / +
    • +
    • + About + / +
    • +
    • + Travel Advice +
    • +

    + +
    + + +
    + + + + +
    +
    +
    + {% for travel in travel_advices.all|slice:"0:1" %}

    +

    + {{ travel.title }} +

    + +
    +
    +

    {{ travel.advice | markdown | safe }}

    + {{ form.media }} +
    +
    + + {% endfor %} +
    +
    +
    + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/2025/about/update_about.html b/templates/2025/about/update_about.html new file mode 100644 index 00000000..2c160b26 --- /dev/null +++ b/templates/2025/about/update_about.html @@ -0,0 +1,49 @@ +{% extends "base.html" %} +{% load i18n static crispy_forms_tags markdown_extras %} +{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "About-Update || PyCon Africa" %}{% endif %}{% endblock %} + + +{% block content %} + + +{% include '2024/navbar.html' %} + + + + +
    +
    +

    About

    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    {% csrf_token %} + {{ form | crispy }} +
    +
    + + +
    +
    + {{ form.media }} + +
    +
    + +
    +
    + +
    +
    +{% endblock %} diff --git a/templates/2025/base.html b/templates/2025/base.html new file mode 100644 index 00000000..201e06ef --- /dev/null +++ b/templates/2025/base.html @@ -0,0 +1,253 @@ +{% load %} +{% load static %} + + + + + + {% block meta_title %}{% endblock %}{% if settings.SITE_TITLE %} | {{ settings.SITE_TITLE }}{% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + {% block content %} + + {% endblock %} + + + {% include '2025/footer.html' %} + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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' %} + + + +
    +
    +

    Code of Conduct

    + +
      +
    • + Home + / +
    • +
    • + About + / +
    • +
    • + Code of Conduct +
    • +

    + +
    + +
    + + + + +
    +
    +
    + {% for coc in cocs.all|slice:"0:1" %}

    +

    + {{ coc.title }} +

    + +
    +
    +

    {{ coc.code_of_conduct | markdown | safe }}

    + {{ form.media }} +
    +
    + + {% endfor %} +
    +
    +
    + + + + +{% 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' %} + + + + +
    +
    +

    Financial Aid

    + +
      +
    • + Home + / +
    • +
    • + About + / +
    • +
    • + Financial Aid +
    • +

    + + + +
    + +
    + + + + + +
    +
    +
    + {% for fin_aid in fin_aids %}

    +

    + {{ fin_aid.title }} +

    + +
    +
    +

    {{ fin_aid.financial_assistance | markdown | safe }}

    + {{ form.media }} +
    +
    + + + {% if fin_aid.is_form_open %} +
    +

    + {% for fin_aid in fin_aids.all|slice:"0:1" %} +
    +
    + +

    + Form +

    +
    + {{ fin_aid.google_form_formfacade_code|safe }} +
    + + +
    + + +
    {{ form.media }} + {% endfor %} +
    + {% elif fin_aid.is_form_closed %} +
    +

    +
    +
    + +

    + Form +

    + + + + + +
    +
    + {% elif fin_aid.is_form_not_open_yet %} + +
    +

    +
    +
    + +

    + Form +

    + + + +
    +
    +
    + {% endif %} + {% endfor %} +
    +
    +
    + + + + +{% 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 @@ + +
    +
    +
    +
    +
    +
    + +
    +
    + + + +
    +
    + {% for status in fin_aid_status %} + {% if status.is_open %} +

    Our Financial Grant is now open.

    +

    Interested in attending PyCon Africa but worried about the costs? We’ve got you covered! 🎉 Our generous financial assistance programme is here to support attendees who would otherwise find it difficult to join us.

    + {% elif status.is_closed %} +

    Our Financial Grant is now closed.

    +

    Thank you for your interest in PyCon Africa. Unfortunately, our financial assistance programme is now closed. Stay tuned for future opportunities!

    + {% elif status.not_open_yet %} +

    Our Financial Grant is not open yet.

    +

    Our financial assistance programme is not open yet. Please check back later for more information on how to apply.

    + {% endif %} + {% endfor %} +
    +
    + +
    +
    + {% if status.is_closed %} + + {% 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 %} + +
    + Image Description +
    + + + + + + + + + + + +
    +
    +
    + + +

    PyCon Africa is organised by a multi-national + team of volunteers on behalf of the global Python programming community. + +

    + +
    + + +
    +
    + Contact us: + team@pycon.africa + +
    + +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    + +
    +
    + +{% 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' %} + + + + +
    +
    + +
    +
    +
    12
    + Days +
    + +
    +
    01
    + Hours +
    + +
    +
    52
    + Minutes +
    + +
    +
    52
    + Seconds +
    +
    + + +

    PyCon Africa

    + +
    +
    +
    +
    + +
    + +
    +

    When

    +

    4th - 8th Aug, 2020

    +
    +
    +
    + +
    +
    +
    + +
    + +
    +

    Where

    +

    Online

    +
    +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    +

    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

    + + +
    + +
    +
    +
    + +
    + +
    +

    Day 1

    +

    4th Aug

    + +
    +
    +
    + +
    +
    +
    +

    Day 2

    +

    5th Aug

    +
    +
    +
    + +
    +
    +
    +

    Day 3

    +

    6th Aug

    +
    +
    +
    + +
    +
    +
    +

    Day 4

    +

    7th Aug

    +
    +
    +
    + +
    +
    +
    +

    Day 5

    +

    8th Aug

    +
    +
    +
    +
    +
    +


    + + + +
    +
    + + + + + +
    +
    +
    +
    + Image description +
    + +
    +

    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 %} +
    + +
    + Image description
    +

    + {{ keynote.speaker_name }} +

    +

    KEYNOTE SPEAKER

    +
    + {{ keynote.organization }} + + + +
    + +
    + {% else %} + {% endif %} + {% empty %} +

    There is nothing in this list

    + {% endfor %} + + +
    +
    + +
    + + + + + +
    +
    +
    +

    +
    +

    Our + | + Panelist

    +
    + +
    + + + +
    + +
    + + +
    + +
    + + + + + + + + +
    + +
    +
    +
    +
    + + +
    +
    +
    +

    + 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

    +
    + +
    + Iamge Description +
    + +
    + + +
    + Iamge Description +
    + +
    +

    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 +

    + +
    + Iamge Description +
    + +
    + + +
    + Iamge Description +
    + +
    +

    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.

    +
    + +
    + +
    + +
    +
    + + + + + + + + + {% 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' %} + + + + +
    +
    +

    Create Schedule

    +
    + +
    + +
    + + + + +
    +
    +
    +
    + + +
    + + {% include 'profiles/profilepic_side.html' %} + + + +
    +
    +
    +
    LAST LOGIN
    +
    Date: {{ request.user.last_login.date }}
    +
    Time: {{ request.user.last_login.time }}
    +
    +
    +
    + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + {% if perms.schedule.add_talkschedule or perms.schedule.change_talkschedule %} + + Create/Add to the Schedule + + {% endif %} +
    + + + + + + {% if already_reviewed %} +

    You have already reviewed this proposal.

    + + {% else %} + +
    +
    +
    + + +

    Create Talk Schedule for {{ year }}

    +
    + + +
    {% csrf_token %} + + + {{ form | crispy }} + {{ form.media }} +
    +
    + + +
    +
    + + +
    +
    +
    + {% 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 %} + + +
    + {% csrf_token %} + {{ form|crispy }} + + +
    + +
    +
    + + + +
    +{% 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
  • +
    +
    + + +
    + +
    +
    +
    +
    + + + + + + + + + +
    + +
    + + + +
    +
    + + + +
    + +
    +
    + + + + + + + + +{% 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 %} + + +
    + +
    +
    +

    Our Schedule

    +
    +
    +
    + + + + + {% if request.user.is_superuser or is_schedule_live or perms.conference_schedule.add_schedule or perms.conference_schedule.change_schedule %} + + + + + + + + + + + + + {% else %} + + {% 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 }}

    + +
      +
    • + Home + / +
    • +
    • + Schedule + / +
    • +
    • + {{ 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 %} + +

    + +
    + {% if talk.user.user_profile.profile_image %} + Image Description + {% else %} + Image Description + {% endif %} + +
    +

    + By {% for speaker in speakers %} + + {{ speaker.name }} {{ speaker.surname }} + + {% endfor %}

    + + {% if talk.user.user_profile.profession %} + {% if talk.user.user_profile.organization %} + {{ talk.user.user_profile.profession }} at {{ talk.user.user_profile.organization }} + {% else %} + {{ talk.user.user_profile.profession }} + {% endif %} + {% else %} + {% endif %} + +
    +
    + + + +

    Abstract: {% if talk.talk_abstract %} {{ talk.talk_abstract | markdown | safe }} + {{ form.media }}{% else %} + +

    + + {% endif %} +

    +
    + GO BACK + +
    + + + + +
    +
    +
    +
    + + +
    +

    Other Talks

    +
      + + {% if related_talks %} + {% for related_talk in related_talks %} +
    • +
      + + {% if related_talk.user.user_profile.profile_image %} + Image Description + + {% else %} + Image Description + + {% endif %} +
      +

      {{related_talk.title}}

      + 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

    + +
    + +
    + +
    + + + +
    +
    +
    +
    + +
    +
    + +
    + {% if speaker.profile_image %} + {{ speaker.name|capfirst }} Profile Picture + {% else %} + {{ speaker.profile_image }} + {% 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" %} + Tutorial Icon + {% elif talk.talk_type == "Keynote Speaker" %} + Keynote Icon + {% else %} + Speaker's Image + {% endif %} +
      +
      +
      +
      + {{ talk.title }} +
      + {{ 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 %} + {{ speaker.name }} + {% else %} + {{ speaker.name }} + {% endif %} +
    +
    +
    + {{ speaker.name }} {{ speaker.surname }} +
    + {{ 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

      + +
      + +
      + +
      + + + + + + + +
      + + + + + +
      + + + + + + +{% 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 }}

      +
      +
      +
      + +
      + + + + + + + +
      +
      + + + +
      +
      + + + + {% 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 %} + {{ speaker.name }} + {% else %} + {{ speaker.name }} + {% 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 %} + {{ speaker.name }} + {% else %} + {{ speaker.name }} + {% 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' %} + + +
      +
      +

      Sponsor Us

      + +
      + +
      + +
      + + + + + +
      +
      + + + + + {% for tier in sponsorship_tiers %} + {% if forloop.counter <= 2 %} + + + {% elif forloop.counter > 2 and forloop.counter <= 9 %} + + + {% 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 %} + Logo of {{ sponsor.name }} + {% 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 %} + + +
      + +
      +
      +

      A Big Thank You to Our Sponsors

      +
      +

      +
      +
      + + +
      + {% for sponsor in sponsor_h_home %} + + {{ sponsor.name }} logo + +
      +

      {{ sponsor.name }}

      +
      +
      + {% endfor %} + + {% for sponsor in sponsor_p_home %} + + {{ sponsor.name }} logo + +
      +

      {{ sponsor.name }}

      +
      +
      + {% endfor %} + + {% for sponsor in sponsor_d_home %} + + {{ sponsor.name }} logo + +
      +

      {{ sponsor.name }}

      +
      +
      + {% endfor %} + + {% for sponsor in sponsor_g_home %} + + {{ sponsor.name }} logo + +
      +

      {{ sponsor.name }}

      +
      +
      + {% endfor %} +
      + + +
      + View more sponsors +
      +
      + 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' %} + + + +
      +
      +

      Our Sponsors

      + +
      + +
      + +
      + + + +
      +
      + {% for tier in sponsorship_tiers %} + {% if tier.sponsors.exists %} + {% if not tier.show_in_grid %} + +
      + +
      + {% endif %} + {% endif %} + {% endfor %} + + + {% for tier in sponsorship_tiers %} + {% if tier.sponsors.exists %} + {% if tier.show_in_grid %} +
      + +
      + {% endif %} + {% endif %} + {% endfor %} + + + {% if no_sponsors %} +
      + +
      + {% endif %} +
      +
      + + + +
      +
      +
      +
      +
      + + {% if diamond %} + + {% endif %} + + + {% if gold %} + + {% endif %} + + + {% if silver%} + + {% endif %} + + + {% if bronze %} + + {% endif %} + + + {% if other %} + + {% 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

      + +
      +
      + + + + +
      +
      + +
      + + + + + +
      +

      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 %} + +
      + + {% if accepted_talks.has_previous %} + ← Previous + {% endif %} + + + Page {{ accepted_talks.number }} of {{ accepted_talks.paginator.num_pages }} + + + {% if accepted_talks.has_next %} + Next → + {% endif %} + +
      + + {% 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 %} + +
      + +
      + +
      +

      {{ speaker.name }} {{ speaker.surname }}

      + {% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} + + +
      + + + + + +
      +
      +
      + + +

      Edit: {{ proposal.title }}

      + + +
      {% csrf_token %} + + + {{ form | crispy }} + {{ form.media }} +
      +
      + + +
      +
      + + + + +
      +
      +
      + +
      +
      +
      +
      + + + +{% 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 %} +
      +

      + {{ invitation.talk.user.user_profile.name }} {{ invitation.talk.user.user_profile.surname }} has invited you to join the session - {{ invitation.talk.title }} +

      Accept Reject +

      + +
      + {% 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

      + +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      + + +

      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 %} 😊

      + +
      + {% csrf_token %} + {{ form | crispy }} + {{ form.media }} +
      +
      + + +
      +
      + +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + + + + + +{% 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 %} +
      + {% csrf_token %} + {{ form.as_p }} + +
      + +

      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 }} +
      • +

      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} + + +
      + + + + + +
      +
      +
      + +

      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' %} +
      + {% csrf_token %} + {{ form|crispy }} + + +
      + {% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + {% if request.user.is_superuser %} + + + Proposals by Category + + + Proposals by Type + + + {% endif %} +
      + + + + + +
      +
      +
      + + +

      Review Submitted Successfully!

      + +
      +
      +

      Your review has been successfully submitted.
      Thank you for your contribution.


      + Review another proposal +
      + + + +
      +
      +
      + +
      +
      +
      +
      + + + +{% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + Proposals by Type + + + + {% endif %} +
      + + + + + +
      +
      +
      + + +

      Reviewed Proposals based on Category

      + +
      + + + + + + + +
      + {% for category, talks in category_talks_scores %} +
      + +
      + + + + + + + + + + + + + + + {% for talk in talks %} + + + + + + + + + + {% empty %} +

         You are yet to review a proposal.

      + {% endfor %} + +

      Rank

      Title

      Session

      Audience

      Current Average Score

      Multiple Submissions

      Name

      {{ talk.rank }} + {{ talk.title }} + + {{ talk.talk_type }} + + {{ 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 }}
      +
      + + +
      + {% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + Proposals by Type + + + {% endif %} +
      + + + + + +
      +
      +
      + + +

      Reviewed Proposals based on Talk Type

      + +
      + + + + + + + +
      + {% for talk_type, talks in type_talks_scores %} +
      + +
      + + + + + + + + + + + + + + + {% for talk in talks %} + + + + + + + + + + {% empty %} +

         You are yet to review a proposal.

      + {% endfor %} + +

      Rank

      Title

      Session

      Audience

      Current Average Score

      Multiple Submissions

      Name

      {{ talk.rank }} + {{ talk.title }} + + {{ talk.talk_type }} + + {{ 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 }}
      +
      + + +
      + {% 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' %} + + + + +
      +
      +

      Proposal Review

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + Proposals by Type + + + {% endif %} +
      + + + + + +
      +
      +
      + +

      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 %} +
      +
      + + {% if talks %} + + + + + + + + + + {% for talk in talks %} + + + + + + + {% endfor %} + + {% else %} +

         There are no proposals pending review.

      + {% endif %} +

      Title

      Session

      Audience

      Actions

      + {{ talk.title }} + + {{ talk.talk_type }} + + Review +
      +
      +
      + {% endfor %} +
      + + + + + + +
      +

      Proposals Reviewed
      This list of proposals includes the average score from all reviewers' ratings.

      + +
      + +
      +

      + + +

      + + + + +
      + + {% if talks_reviewed_with_scores %} + + + + + + + + + + + {% for talk, avg_score in talks_reviewed_with_scores %} + + + + + + + {% empty %} +

         You are yet to review a proposal.

      + {% endfor %} + + {% else %} +

         You are yet to review a proposal.

      + {% endif %} +

      Title +                 +                 +

      Session

      Audience

      Current Average Score

      + {{ talk.title }} + + {{ talk.talk_type }} + + {{ avg_score|floatformat:2 }} + +
      +
      +
      + +
      + + {% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} +
      + + + + + + {% 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" }}

      +
      + +
      + + +
      {% csrf_token %} + + + {{ form | crispy }} + {{ form.media }} +
      +
      + + +
      +
      + + +
      +
      +
      + {% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} +
      + + + + + +
      +
      +
      + + +

      {{ 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 %} +
      + {% csrf_token %} + + +
      + + {% 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 %} + + {% 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

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + +
      + + + + + + +
      +
      +
      + + + + + + + + + +
      +
      +
      + + +
      +
      +
      +
      + + + +{% 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}}

      + +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + + + + {% include 'profiles/profilepic_side.html' %} + + + +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      + +
      +

         Update my Profile

      +

         Change Password

      +

         Back to submitted Talks

      +

         Submit a new Talk

      + +
      +
      +
      +
      +
      +
      +
      + +

      Edit your talk - {{ talk.title}} below.

      + +
      + {% csrf_token %} + {{ form.media }} + {{ form | crispy }} +
      +
      + + +
      +
      +
      + +
      +
      + +
      + +
      + +
      + + + + + +
      +
      +
      + + + + + +{% 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 }}

      +
      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} + + + +
      + + + + + + +
      +
      +
      +

      + + {% 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" %} + + + + {% 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 + + + + + + + +

      + {% if can_upload %} + + {% if has_uploaded_slide %} + +
      + + +
      + + + {% else %} + + + Upload Slides + + {% endif %} + + {% else %} + {% 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 }}

      + + + +
      +

      + GO BACK + {% if active_period %} + + Edit Talk + + {% elif talk.user_response == 'A' or is_sponsor_or_keynote %} + + Edit Talk + + {% else %} + + Edit Talk + + {% endif %} + + +
      +
      + +
      +
      + +
      + + {% 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" %} + + + + {% 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 }}

      + + + +
      +

      + GO BACK + +
      +
      + +
      +
      + + +
      +
      + +
      + {% 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 +
      • +

      + +
      + +
      + + + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} + +
      + + + + +
      +
      +
      + + + + {% 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 %} + +
      + {% csrf_token %} + {{ form|crispy }} +
      + +
      + +{% 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)

      +
      + +
      + +
      + + +
      +
      +
      +
      + + +
      + + {% include 'profiles/profilepic_side.html' %} + + + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + + + My Profile + + + + + + Update my Profile + + + + + + Change Password + + + + + + My Submitted Talks + + + + + + Submit a new Talk + + + + {% if perms.reviews.add_review %} + + + Review Proposals + + + {% endif %} + + + + {% if request.user.is_superuser %} + + + Proposals by Category + + + {% endif %} + + +
      + + + +
      +
      +
      + + +

      + + + {% if submitted_talks %} + +
      + +
      +

      + + Submitted Talks +

      +
      + + + + + + + + + + + + + {% for talk in submitted_talks %} + + + + + + + + {% endfor %} + +

      Title +                 +                 +

      Session

      Audience

      Status

      Actions

      + {{ talk.title }} + + {{ talk.talk_type }} + + {% 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 %} +
      +
      +
      + +
      + + {% 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 @@ + +
      +
      +
      +
      LAST LOGIN
      +
      Date: {{ request.user.last_login.date }}
      +
      Time: {{ request.user.last_login.time }}
      +
      +
      +
      + + <-- 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 }}

      +
      +
      + +
      + + + {% 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 @@ - + - + - + - +