From c223adde0fb39e88956d9c5b220ddef558c44b72 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 11 Oct 2018 11:49:48 +0200 Subject: [PATCH 2/2] Slugify event URLs This makes the URLs a lot nicer to view, and AFAIK (with no real knowledge) better for search engines. --- pgweb/events/feeds.py | 3 ++- pgweb/events/models.py | 1 + pgweb/events/struct.py | 3 ++- pgweb/events/views.py | 7 +++++-- pgweb/urls.py | 3 ++- templates/events/archive.html | 2 +- templates/index.html | 2 +- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pgweb/events/feeds.py b/pgweb/events/feeds.py index b21d678..77c4752 100644 --- a/pgweb/events/feeds.py +++ b/pgweb/events/feeds.py @@ -1,4 +1,5 @@ from django.contrib.syndication.views import Feed +from django.template.defaultfilters import slugify from models import Event @@ -15,7 +16,7 @@ class EventFeed(Feed): return Event.objects.filter(approved=True).filter(training=False)[:10] def item_link(self, obj): - return "https://www.postgresql.org/about/event/%s/" % obj.id + return "https://www.postgresql.org/about/event/{0}-{1}/".format(slugify(obj.title), obj.id) def item_pubdate(self, obj): return datetime.combine(obj.startdate,time.min) diff --git a/pgweb/events/models.py b/pgweb/events/models.py index 45add27..f4ca507 100644 --- a/pgweb/events/models.py +++ b/pgweb/events/models.py @@ -27,6 +27,7 @@ class Event(models.Model): def purge_urls(self): yield '/about/event/%s/' % self.pk + yield '/about/event/.*-%s/' % self.pk yield '/about/events/' yield '/events.rss' # FIXME: when to expire the front page? diff --git a/pgweb/events/struct.py b/pgweb/events/struct.py index 488acb2..6a4eb7e 100644 --- a/pgweb/events/struct.py +++ b/pgweb/events/struct.py @@ -1,3 +1,4 @@ +from django.template.defaultfilters import slugify from datetime import date from models import Event @@ -13,5 +14,5 @@ def get_struct(): yearsold = (now - n.startdate).days / 365 if yearsold > 4: yearsold = 4 - yield ('about/event/%s/' % n.id, + yield ('about/event/{0}-{1}/'.format(slugify(n.title), n.id), 0.5-(yearsold/10.0)) diff --git a/pgweb/events/views.py b/pgweb/events/views.py index 5c76c89..0f390fe 100644 --- a/pgweb/events/views.py +++ b/pgweb/events/views.py @@ -1,5 +1,6 @@ from django.shortcuts import get_object_or_404 -from django.http import Http404 +from django.http import HttpResponseRedirect, Http404 +from django.template.defaultfilters import slugify from pgweb.util.decorators import login_required from datetime import date @@ -40,10 +41,12 @@ def archive(request): def trainingarchive(request): return _eventarchive(request, True, 'Training') -def item(request, itemid, throwaway=None): +def item(request, itemid, slug=None): event = get_object_or_404(Event, pk=itemid) if not event.approved: raise Http404 + if slug != slugify(event.title): + return HttpResponseRedirect('/about/event/{0}-{1}'.format(slugify(event.title), event.id)) return render_pgweb(request, 'about', 'events/item.html', { 'obj': event, }) diff --git a/pgweb/urls.py b/pgweb/urls.py index 741cf60..d9dc236 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -42,7 +42,8 @@ urlpatterns = [ url(r'^about/events/$', pgweb.events.views.main), url(r'^about/eventarchive/$', pgweb.events.views.archive), url(r'^about/eventarchive/training/$', pgweb.events.views.trainingarchive), - url(r'^about/event/(\d+)(-.*)?/$', pgweb.events.views.item), + url(r'^about/event/(?P\d+)(?P-.*)?/$', pgweb.events.views.item), + url(r'^about/event/(?P[^/]+)-(?P\d+)/$', pgweb.events.views.item), url(r'^about/featurematrix/$', pgweb.featurematrix.views.root), url(r'^about/featurematrix/detail/(\d+)/$', pgweb.featurematrix.views.detail), diff --git a/templates/events/archive.html b/templates/events/archive.html index 1959c65..a63f293 100644 --- a/templates/events/archive.html +++ b/templates/events/archive.html @@ -23,7 +23,7 @@ whatsoever. {% if event.badged %} PostgreSQL Community Event {% endif %} - {{event.title}} + {{event.title}}
Date: {{event.displaydate|safe}}
Location: {{event.locationstring}}
diff --git a/templates/index.html b/templates/index.html index 28dd14c..ddbcfb4 100644 --- a/templates/index.html +++ b/templates/index.html @@ -76,7 +76,7 @@ {% if event.badged %} PostgreSQL Community Event {% endif %} - {{ event.displaydate|safe }} · {{ event.title }} + {{ event.displaydate|safe }} · {{ event.title }} {% endfor %} -- 2.11.0