From 665f0b068c85d6f54eddf83a51a96599945d2163 Mon Sep 17 00:00:00 2001
From: Christopher Neugebauer <_@chrisjrn.com>
Date: Sat, 29 Jun 2019 15:11:12 +0800
Subject: [PATCH] Use append_slash

---
 pinaxcon/settings.py |   6 ++-
 pinaxcon/urls.py     | 106 +++++++++++++++++++++----------------------
 2 files changed, 57 insertions(+), 55 deletions(-)

diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index af3e4e6..58e12f1 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -17,6 +17,8 @@ DATABASES = {
 
 UNPREPEND_WWW = bool(int(os.environ.get("DJANGO_UNPREPEND_WWW", "0")))
 
+APPEND_SLASH = True
+
 # HEROKU: Update database configuration with $DATABASE_URL.
 import dj_database_url
 db_from_env = dj_database_url.config()
@@ -30,9 +32,9 @@ from_email = os.environ.get("DJANGO_DEFAULT_FROM_EMAIL", None)
 if from_email is not None:
     DEFAULT_FROM_EMAIL = from_email
     SERVER_EMAIL = DEFAULT_FROM_EMAIL
-    
+
 THEME_CONTACT_EMAIL = os.environ.get("THEME_CONTACT_EMAIL", None)
-    
+
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
diff --git a/pinaxcon/urls.py b/pinaxcon/urls.py
index d353875..93e69e5 100644
--- a/pinaxcon/urls.py
+++ b/pinaxcon/urls.py
@@ -18,76 +18,76 @@ urlpatterns = [
     url(r"^$", TemplateView.as_view(template_name="static_pages/homepage.html"), name="home"),
 
     # about
-    url(r"^about/north-bay-python$", TemplateView.as_view(template_name="static_pages/about/north_bay_python.html"), name="about/north-bay-python"),
-    url(r"^about/petaluma$", TemplateView.as_view(template_name="static_pages/about/petaluma.html"), name="about/petaluma"),
-    url(r"^about/team$", TemplateView.as_view(template_name="static_pages/about/team.html"), name="about/team"),
-    url(r"^about/transparency$", TemplateView.as_view(template_name="static_pages/about/transparency/transparency.html"), name="about/transparency"),
-    url(r"^about/program-transparency$", TemplateView.as_view(template_name="static_pages/about/transparency/program.html"), name="about/program-transparency"),
-    url(r"^about/colophon$", TemplateView.as_view(template_name="static_pages/about/colophon.html"), name="about/colophon"),
+    url(r"^about/north-bay-python/$", TemplateView.as_view(template_name="static_pages/about/north_bay_python.html"), name="about/north-bay-python"),
+    url(r"^about/petaluma/$", TemplateView.as_view(template_name="static_pages/about/petaluma.html"), name="about/petaluma"),
+    url(r"^about/team/$", TemplateView.as_view(template_name="static_pages/about/team.html"), name="about/team"),
+    url(r"^about/transparency/$", TemplateView.as_view(template_name="static_pages/about/transparency/transparency.html"), name="about/transparency"),
+    url(r"^about/program-transparency/$", TemplateView.as_view(template_name="static_pages/about/transparency/program.html"), name="about/program-transparency"),
+    url(r"^about/colophon/$", TemplateView.as_view(template_name="static_pages/about/colophon.html"), name="about/colophon"),
 
     # program
-    url(r"^program/events$", TemplateView.as_view(template_name="static_pages/program/events.html"), name="program/events"),
-    url(r"^events$", RedirectView.as_view(url="program/events")),
-    url(r"^program/call-for-proposals$", RedirectView.as_view(url="/speak")),
-    url(r"^program/selection-process$", TemplateView.as_view(template_name="static_pages/program/selection_process.html"), name="program/selection-process"),
-    url(r"^proposals$", RedirectView.as_view(url="/speak")),
-    url(r"^cfp$", RedirectView.as_view(url="/speak")),
-    url(r"^speak$", TemplateView.as_view(template_name="static_pages/speak.html"), name="speak"),
+    url(r"^program/events/$", TemplateView.as_view(template_name="static_pages/program/events.html"), name="program/events"),
+    url(r"^events/$", RedirectView.as_view(url="program/events")),
+    url(r"^program/call-for-proposals/$", RedirectView.as_view(url="/speak")),
+    url(r"^program/selection-process/$", TemplateView.as_view(template_name="static_pages/program/selection_process.html"), name="program/selection-process"),
+    url(r"^proposals/$", RedirectView.as_view(url="/speak")),
+    url(r"^cfp/$", RedirectView.as_view(url="/speak")),
+    url(r"^speak/$", TemplateView.as_view(template_name="static_pages/speak.html"), name="speak"),
 
     # attend
     # url(r"^attend$", TemplateView.as_view(template_name="static_pages/attend/attend.html"), name="attend/attend"),
-    url(r"^tickets$", RedirectView.as_view(url="attend")),
-    url(r"^tickets/buy$", views.buy_ticket, name="buy_ticket"),
-    url(r"^attend/business-case$", TemplateView.as_view(template_name="static_pages/attend/business-case.html"), name="attend/business-case"),
+    url(r"^tickets/$", RedirectView.as_view(url="attend")),
+    url(r"^tickets/buy/$", views.buy_ticket, name="buy_ticket"),
+    url(r"^attend/business-case/$", TemplateView.as_view(template_name="static_pages/attend/business-case.html"), name="attend/business-case"),
 
-    url(r"^opportunity-grant$", TemplateView.as_view(template_name="static_pages/opportunity-grant.html"), name="opportunity-grant"),
-    url(r"^attend/finaid$", RedirectView.as_view(url="/opportunity-grant")),
-    url(r"^attend/finaid$", RedirectView.as_view(url="/opportunity-grant")),
-    url(r"^attend/financial-aid$", RedirectView.as_view(url="/opportunity-grant")),
+    url(r"^opportunity-grant/$", TemplateView.as_view(template_name="static_pages/opportunity-grant.html"), name="opportunity-grant"),
+    url(r"^attend/finaid/$", RedirectView.as_view(url="/opportunity-grant")),
+    url(r"^attend/finaid/$", RedirectView.as_view(url="/opportunity-grant")),
+    url(r"^attend/financial-aid/$", RedirectView.as_view(url="/opportunity-grant")),
 
-    # url(r"^attend/stay$", TemplateView.as_view(template_name="static_pages/attend/travel.html"), name="attend/travel"),
-    # url(r"^attend/travel$", TemplateView.as_view(template_name="static_pages/attend/travel.html"), name="attend/travel"),
-    url(r"^attend/hotels$", TemplateView.as_view(template_name="static_pages/attend/hotels.html"), name="attend/hotels"),
-    # url(r"^attend/tshirt$", TemplateView.as_view(template_name="static_pages/attend/tshirt.html"), name="attend/tshirt"),
-    url(r"^attend/accessibility-and-accommodations$",TemplateView.as_view(template_name="static_pages/attend/accommodations.html"), name="attend/accessibility-and-accommodations"),
-    url(r"^accessibility$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
-    url(r"^accommodations$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
-    url(r"^a11y$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
-    url(r"^guides$",TemplateView.as_view(template_name="static_pages/attend/guides.html"), name="attend/guides"),
-    url(r"^guide$", RedirectView.as_view(url="guides")),
+    # url(r"^attend/stay/$", TemplateView.as_view(template_name="static_pages/attend/travel.html"), name="attend/travel"),
+    # url(r"^attend/travel/$", TemplateView.as_view(template_name="static_pages/attend/travel.html"), name="attend/travel"),
+    url(r"^attend/hotels/$", TemplateView.as_view(template_name="static_pages/attend/hotels.html"), name="attend/hotels"),
+    # url(r"^attend/tshirt/$", TemplateView.as_view(template_name="static_pages/attend/tshirt.html"), name="attend/tshirt"),
+    url(r"^attend/accessibility-and-accommodations/$",TemplateView.as_view(template_name="static_pages/attend/accommodations.html"), name="attend/accessibility-and-accommodations"),
+    url(r"^accessibility/$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
+    url(r"^accommodations/$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
+    url(r"^a11y/$", RedirectView.as_view(url="attend/accessibility-and-accommodations")),
+    url(r"^guides/$",TemplateView.as_view(template_name="static_pages/attend/guides.html"), name="attend/guides"),
+    url(r"^guide/$", RedirectView.as_view(url="guides")),
 
     # go
-    url(r"^go/fly$", TemplateView.as_view(template_name="static_pages/go/fly.html"), name="go/fly"),
-    url(r"^go/stay$", TemplateView.as_view(template_name="static_pages/go/stay.html"), name="go/stay"),
-    url(r"^go/day-trip$", TemplateView.as_view(template_name="static_pages/go/day-trip.html"), name="go/day-trip`"),
+    url(r"^go/fly/$", TemplateView.as_view(template_name="static_pages/go/fly.html"), name="go/fly"),
+    url(r"^go/stay/$", TemplateView.as_view(template_name="static_pages/go/stay.html"), name="go/stay"),
+    url(r"^go/day-trip/$", TemplateView.as_view(template_name="static_pages/go/day-trip.html"), name="go/day-trip`"),
 
-    url(r"^safety$", TemplateView.as_view(template_name="static_pages/safety.html"), name="safety"),
-    url(r"^emergencies$", RedirectView.as_view(url="safety")),
-    url(r"^emergency$", RedirectView.as_view(url="safety")),
+    url(r"^safety/$", TemplateView.as_view(template_name="static_pages/safety.html"), name="safety"),
+    url(r"^emergencies/$", RedirectView.as_view(url="safety")),
+    url(r"^emergency/$", RedirectView.as_view(url="safety")),
 
-    url(r"^attend/food$", TemplateView.as_view(template_name="static_pages/attend/food.html"), name="attend/food"),
-    url(r"^food-guide$", RedirectView.as_view(url="attend/food")),
-    url(r"^food$", RedirectView.as_view(url="attend/food")),
-    url(r"^attend/transit$", TemplateView.as_view(template_name="static_pages/attend/transit.html"), name="attend/transit"),
-    url(r"^transit$", RedirectView.as_view(url="attend/transit")),
+    url(r"^attend/food/$", TemplateView.as_view(template_name="static_pages/attend/food.html"), name="attend/food"),
+    url(r"^food-guide/$", RedirectView.as_view(url="attend/food")),
+    url(r"^food/$", RedirectView.as_view(url="attend/food")),
+    url(r"^attend/transit/$", TemplateView.as_view(template_name="static_pages/attend/transit.html"), name="attend/transit"),
+    url(r"^transit/$", RedirectView.as_view(url="attend/transit")),
 
-    url(r"^code-of-conduct$", TemplateView.as_view(template_name="static_pages/code_of_conduct/code_of_conduct.html"), name="code-of-conduct"),
-    url(r"^coc$", RedirectView.as_view(url="code-of-conduct")),
-    url(r"^code-of-conduct/harassment-incidents$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_attendee.html"), name="code-of-conduct/harassment-incidents"),
-    url(r"^code-of-conduct/harassment-staff-procedures$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_staff.html"), name="code-of-conduct/harassment-staff-procedures"),
-    url(r"^terms-and-conditions$", TemplateView.as_view(template_name="static_pages/terms_and_conditions.html"), name="terms-and-conditions"),
-    url(r"^terms$", RedirectView.as_view(url="terms-and-conditions")),
+    url(r"^code-of-conduct/$", TemplateView.as_view(template_name="static_pages/code_of_conduct/code_of_conduct.html"), name="code-of-conduct"),
+    url(r"^coc/$", RedirectView.as_view(url="code-of-conduct")),
+    url(r"^code-of-conduct/harassment-incidents/$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_attendee.html"), name="code-of-conduct/harassment-incidents"),
+    url(r"^code-of-conduct/harassment-staff-procedures/$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_staff.html"), name="code-of-conduct/harassment-staff-procedures"),
+    url(r"^terms-and-conditions/$", TemplateView.as_view(template_name="static_pages/terms_and_conditions.html"), name="terms-and-conditions"),
+    url(r"^terms/$", RedirectView.as_view(url="terms-and-conditions")),
 
     # sponsor
-    url(r"^sponsors/prospectus$", RedirectView.as_view(url=_static("assets/northbaypython_prospectus.pdf")), name="sponsors/prospectus"),
+    url(r"^sponsors/prospectus/$", RedirectView.as_view(url=_static("assets/northbaypython_prospectus.pdf")), name="sponsors/prospectus"),
     url(r"^northbaypython_prospectus.pdf$", RedirectView.as_view(url=_static("assets/northbaypython_prospectus.pdf")), name="northbaypython_prospectus.pdf"),
-    url(r"^sponsors/become-a-sponsor$", TemplateView.as_view(template_name="static_pages/sponsors/become_a_sponsor.html"), name="sponsors/become-a-sponsor"),
-    url(r"^sponsors/donate$", TemplateView.as_view(template_name="static_pages/sponsors/donate.html"), name="sponsors/donate"),
-    url(r"^donate$", RedirectView.as_view(url="sponsors/donate")),
-    url(r"^about/donate$", RedirectView.as_view(url="sponsors/donate")),
+    url(r"^sponsors/become-a-sponsor/$", TemplateView.as_view(template_name="static_pages/sponsors/become_a_sponsor.html"), name="sponsors/become-a-sponsor"),
+    url(r"^sponsors/donate/$", TemplateView.as_view(template_name="static_pages/sponsors/donate.html"), name="sponsors/donate"),
+    url(r"^donate/$", RedirectView.as_view(url="sponsors/donate")),
+    url(r"^about/donate/$", RedirectView.as_view(url="sponsors/donate")),
 
     # news
-    url(r"^news$", TemplateView.as_view(template_name="static_pages/news.html"), name="news"),
+    url(r"^news/$", TemplateView.as_view(template_name="static_pages/news.html"), name="news"),
 
     # Django, Symposion, and Registrasion URLs