From 224a915bd5af4139980993e7a011fa9a2dd4e6c7 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 11 Oct 2018 11:08:12 +0200 Subject: [PATCH 1/2] Slugify news URLs This makes the URLs a lot nicer to view, and AFAIK (with no real knowledge) better for search engines. --- pgweb/news/admin.py | 6 +++++- pgweb/news/feeds.py | 3 ++- pgweb/news/models.py | 1 + pgweb/news/struct.py | 3 ++- pgweb/news/views.py | 7 +++++-- pgweb/urls.py | 3 ++- templates/index.html | 8 ++++---- templates/news/newsarchive.html | 4 ++-- templates/pages/developer/beta.html | 2 +- templates/pages/include/topbar.html | 2 +- templates/security/security.html | 2 +- 11 files changed, 26 insertions(+), 15 deletions(-) diff --git a/pgweb/news/admin.py b/pgweb/news/admin.py index 93ca0df..38c6ff3 100644 --- a/pgweb/news/admin.py +++ b/pgweb/news/admin.py @@ -1,10 +1,11 @@ from django.contrib import admin +from django.template.defaultfilters import slugify from pgweb.util.admin import PgwebAdmin from models import NewsArticle, NewsTag class NewsArticleAdmin(PgwebAdmin): - list_display = ('title', 'org', 'date', 'approved', ) + list_display = ('title', 'org', 'date', 'approved', 'posturl') list_filter = ('approved', ) filter_horizontal = ('tags', ) search_fields = ('content', 'title', ) @@ -17,6 +18,9 @@ class NewsArticleAdmin(PgwebAdmin): } return super(NewsArticleAdmin, self).change_view(request, object_id, extra_context=my_context) + def posturl(self, obj): + return '/news/{0}-{1}/'.format(slugify(obj.title), obj.id) + class NewsTagAdmin(PgwebAdmin): list_display = ('urlname', 'name', 'description') diff --git a/pgweb/news/feeds.py b/pgweb/news/feeds.py index 6c77fe3..88da2a5 100644 --- a/pgweb/news/feeds.py +++ b/pgweb/news/feeds.py @@ -1,4 +1,5 @@ from django.contrib.syndication.views import Feed +from django.template.defaultfilters import slugify from models import NewsArticle @@ -21,7 +22,7 @@ class NewsFeed(Feed): return NewsArticle.objects.filter(approved=True)[:10] def item_link(self, obj): - return "https://www.postgresql.org/about/news/%s/" % obj.id + return "https://www.postgresql.org/about/news/{0}-{1}/".format(slugify(obj.title), obj.id) def item_pubdate(self, obj): return datetime.combine(obj.date,time.min) diff --git a/pgweb/news/models.py b/pgweb/news/models.py index 2c25489..911ae34 100644 --- a/pgweb/news/models.py +++ b/pgweb/news/models.py @@ -28,6 +28,7 @@ class NewsArticle(models.Model): def purge_urls(self): yield '/about/news/%s/' % self.pk + yield '/about/news/.*-%s/' % self.pk yield '/about/newsarchive/' yield '/news.rss' yield '/news/.*.rss' diff --git a/pgweb/news/struct.py b/pgweb/news/struct.py index 2c06c87..e9a22c8 100644 --- a/pgweb/news/struct.py +++ b/pgweb/news/struct.py @@ -1,3 +1,4 @@ +from django.template.defaultfilters import slugify from datetime import date, timedelta from models import NewsArticle @@ -13,5 +14,5 @@ def get_struct(): yearsold = (now - n.date).days / 365 if yearsold > 4: yearsold = 4 - yield ('about/news/%s/' % n.id, + yield ('about/news/{0}-{1}/'.format(slugify(n.title), n.id), 0.5-(yearsold/10.0)) diff --git a/pgweb/news/views.py b/pgweb/news/views.py index 94ac1e6..6491624 100644 --- a/pgweb/news/views.py +++ b/pgweb/news/views.py @@ -1,5 +1,6 @@ from django.shortcuts import get_object_or_404 -from django.http import HttpResponse, Http404 +from django.http import HttpResponse, HttpResponseRedirect, Http404 +from django.template.defaultfilters import slugify from pgweb.util.decorators import login_required from pgweb.util.contexts import render_pgweb @@ -23,10 +24,12 @@ def archive(request, tag=None, paging=None): 'newstags': NewsTag.objects.all(), }) -def item(request, itemid, throwaway=None): +def item(request, itemid, slug=None): news = get_object_or_404(NewsArticle, pk=itemid) if not news.approved: raise Http404 + if slug != slugify(news.title): + return HttpResponseRedirect('/about/news/{0}-{1}'.format(slugify(news.title), news.id)) return render_pgweb(request, 'about', 'news/item.html', { 'obj': news, 'newstags': NewsTag.objects.all(), diff --git a/pgweb/urls.py b/pgweb/urls.py index 93d01f1..741cf60 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -36,7 +36,8 @@ urlpatterns = [ url(r'^about/$', pgweb.core.views.about), url(r'^about/newsarchive/([^/]+/)?$', pgweb.news.views.archive), - url(r'^about/news/(\d+)(-.*)?/$', pgweb.news.views.item), + url(r'^about/news/(?P\d+)(?P-.*)?/$', pgweb.news.views.item), + url(r'^about/news/(?P[^/]+)-(?P\d+)/$', pgweb.news.views.item), url(r'^about/news/taglist.json/$', pgweb.news.views.taglist_json), url(r'^about/events/$', pgweb.events.views.main), url(r'^about/eventarchive/$', pgweb.events.views.archive), diff --git a/templates/index.html b/templates/index.html index 6c21c54..28dd14c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -47,7 +47,7 @@

2018-09-20 - PostgreSQL 11 Beta 4 Released! - TThe PostgreSQL Global Development Group announces that the fourth beta release of PostgreSQL 11 is now available for download. This release contains previews of all features that will be available in the final release of PostgreSQL 11, though some details of the release could change before then. + TThe PostgreSQL Global Development Group announces that the fourth beta release of PostgreSQL 11 is now available for download. This release contains previews of all features that will be available in the final release of PostgreSQL 11, though some details of the release could change before then.

    {% for v in versions %} @@ -129,7 +129,7 @@

    Latest News

    -

    PostgreSQL 11 Beta 4 Released!

    +

    PostgreSQL 11 Beta 4 Released!

    •  2018-09-20
    • @@ -139,7 +139,7 @@ The PostgreSQL Global Development Group announces that the fourth beta release of PostgreSQL 11 is now available for download. This release contains previews of all features that will be available in the final release of PostgreSQL 11, though some details of the release could change before then.

      @@ -152,7 +152,7 @@
        {% for n in news %}
      • -

        {{ n.title }}

        +

        {{ n.title }}

        •  {{ n.displaydate }} by {{ n.org.name }}
        diff --git a/templates/news/newsarchive.html b/templates/news/newsarchive.html index e5dd3b3..10bc559 100644 --- a/templates/news/newsarchive.html +++ b/templates/news/newsarchive.html @@ -9,10 +9,10 @@

        {%for obj in news %} -

        {{obj.title}}

        +

        {{obj.title}}

        Posted on {{obj.displaydate}}{% if obj.org.name != '_migrated' %} by {{ obj.org.name }}{% endif %}
        {{obj.content|markdown|striptags|truncatewords:20}} -

        Read more...

        +

        Read more...

        {%endfor%}

        Submit news

        {%endblock%} diff --git a/templates/pages/developer/beta.html b/templates/pages/developer/beta.html index d2c4d3c..f73f3ea 100644 --- a/templates/pages/developer/beta.html +++ b/templates/pages/developer/beta.html @@ -38,7 +38,7 @@