diff --git a/.gitignore b/.gitignore
index 6c1419f7..3bf785bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,3 +89,5 @@ ENV/
.ropeproject
dev.db
+
+pybay/site_media/*
\ No newline at end of file
diff --git a/pybay/context_processors.py b/pybay/context_processors.py
new file mode 100644
index 00000000..21636c94
--- /dev/null
+++ b/pybay/context_processors.py
@@ -0,0 +1,7 @@
+from django.conf import settings
+
+
+def settings_variables(request):
+ return {
+ 'SHOW_SPEAKERS_LIST_NAVBAR_LINK': getattr(settings, 'SHOW_SPEAKERS_LIST_NAVBAR_LINK', False)
+ }
diff --git a/pybay/settings.py b/pybay/settings.py
index a9e63013..4bb1f74b 100644
--- a/pybay/settings.py
+++ b/pybay/settings.py
@@ -92,7 +92,10 @@
'django.contrib.messages.context_processors.messages',
'account.context_processors.account',
'pinax_theme_bootstrap.context_processors.theme',
- 'symposion.reviews.context_processors.reviews']}}]
+ 'symposion.reviews.context_processors.reviews',
+ 'pybay.context_processors.settings_variables',
+ ]}
+}]
MIDDLEWARE_CLASSES = [
"django.contrib.sessions.middleware.SessionMiddleware",
@@ -217,4 +220,6 @@
"talk": "pybay.proposals.forms.TalkProposalForm",
}
#Crispy Forms
-CRISPY_TEMPLATE_PACK ='bootstrap3'
+CRISPY_TEMPLATE_PACK = 'bootstrap3'
+
+SHOW_SPEAKERS_LIST_NAVBAR_LINK = True
diff --git a/pybay/templates/frontend/base.html b/pybay/templates/frontend/base.html
index 4e7a51e5..f9230a8e 100644
--- a/pybay/templates/frontend/base.html
+++ b/pybay/templates/frontend/base.html
@@ -55,8 +55,13 @@
sponsors
- call for proposals
+ Call For Proposals
+ {% if SHOW_SPEAKERS_LIST_NAVBAR_LINK %}
+
+ Speakers
+
+ {% endif %}
Registration
diff --git a/pybay/templates/frontend/speakers_list.html b/pybay/templates/frontend/speakers_list.html
new file mode 100644
index 00000000..65ab68c1
--- /dev/null
+++ b/pybay/templates/frontend/speakers_list.html
@@ -0,0 +1,23 @@
+{% extends 'frontend/base.html' %}
+{% load static %}
+{% load thumbnail %}
+
+{% block content %}
+
+
+
+
+
+
+ {% for speaker in speakers %}
+
+
+
{{ speaker.name }}
+
{{ speaker.biography|truncatechars:"300" }}
+
+ {% endfor %}
+
+
+{% endblock content %}
diff --git a/pybay/tests/__init__.py b/pybay/tests/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/pybay/tests.py b/pybay/tests/test_forms.py
similarity index 99%
rename from pybay/tests.py
rename to pybay/tests/test_forms.py
index 0ec2cebe..c71531fd 100644
--- a/pybay/tests.py
+++ b/pybay/tests/test_forms.py
@@ -2,13 +2,12 @@
from pybay.forms import CallForProposalForm
-
class CfpFormTestCase(TestCase):
- fixtures=[
+ fixtures = [
"conference",
"proposal_base",
]
-
+
def _get_data(self):
return {
'first_name': "Daniel",
diff --git a/pybay/urls.py b/pybay/urls.py
index b5db8d4c..f3c5d19f 100644
--- a/pybay/urls.py
+++ b/pybay/urls.py
@@ -12,7 +12,9 @@
from symposion.sponsorship import urls as sponsor_urls
from symposion.speakers import urls as speaker_urls
-from pybay.views import pybay_cfp_create, pybay_sponsors_list, pybay_faq_index
+from pybay.views import (
+ pybay_cfp_create, pybay_sponsors_list,
+ pybay_faq_index, pybay_speakers_list)
WIKI_SLUG = r"(([\w-]{2,})(/[\w-]{2,})*)"
@@ -45,6 +47,7 @@
# url(r"^teams/", include("symposion.teams.urls")),
# url(r"^markitup/", include("markitup.urls")),
url(r"^our-sponsors$", pybay_sponsors_list, name="pybay_sponsors_list"),
+ url(r"^our-speakers$", pybay_speakers_list, name="pybay_speakers_list"),
# url(r"^", include("symposion.cms.urls")),
]
diff --git a/pybay/views.py b/pybay/views.py
index fdccb7d4..f9630292 100644
--- a/pybay/views.py
+++ b/pybay/views.py
@@ -3,6 +3,7 @@
from .forms import CallForProposalForm
from pybay.faqs.models import Faq
from symposion.sponsorship.models import Sponsor
+from pybay.proposals.models import Proposal
from collections import defaultdict
@@ -44,3 +45,19 @@ def pybay_cfp_create(request):
else:
form = CallForProposalForm()
return render(request, 'frontend/cfp.html', {'form': form})
+
+
+def pybay_speakers_list(request):
+ accepted_proposals = Proposal.objects.filter(
+ result__status='accepted')
+ speakers = []
+ for proposal in accepted_proposals:
+ speakers += list(proposal.speakers())
+
+ speakers = list(set(speakers)) # filters duplicate speakers
+ speakers = filter(lambda s: s.photo, speakers) # filters speakers without photo
+ speakers = sorted(speakers, key=lambda i: i.name) # sorts alphabetically
+
+ return render(request, 'frontend/speakers_list.html', {
+ 'speakers': speakers
+ })
diff --git a/requirements.txt b/requirements.txt
index 2186e735..81e98b62 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
-Django==1.9.2
django-appconf==1.0.1
django-bootstrap-form==3.2.1
+django-crispy-forms==1.6.1
django-jsonfield==1.0.1
django-markitup==2.2.2
django-model-utils==2.4
@@ -10,16 +10,16 @@ django-taggit==0.18.0
django-timezone-field==2.0
django-timezones==0.2
django-user-accounts==2.0
+Django==1.9.2
easy-thumbnails==2.3
eventlog==0.8.0
+git+https://github.com/pybay/symposion.git#egg=symposion-1.0b2.dev3
html5lib==0.9999999
Markdown==2.6.5
metron==1.3.5
olefile==0.44
-git+https://github.com/pybay/symposion.git#egg=symposion-1.0b2.dev3
Pillow
+pinax-boxes==2.1.2
pinax-theme-bootstrap==5.6.0
pytz==2015.7
six==1.10.0
-pinax-boxes==2.1.2
-django-crispy-forms==1.6.1