From 40ead1bbe11d8f9762e045a97be2424f1c6c1764 Mon Sep 17 00:00:00 2001 From: Danielle McLean Date: Sat, 13 Jan 2018 14:49:38 +1100 Subject: [PATCH] Provide simple support for fetching entries in AMP format - can't handle images yet and needs some other tweaks, but works nicely so far c: --- entries/kinds.py | 4 ++ entries/models.py | 8 +++ entries/templates/entries/entry.html | 5 +- entries/templates/entries/entry_amp.html | 89 ++++++++++++++++++++++++ entries/templates/entries/h-entry.html | 4 ++ entries/urls.py | 1 + entries/views.py | 8 +++ lemoncurry/debug.py | 7 ++ lemoncurry/settings/base.py | 6 ++ 9 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 entries/templates/entries/entry_amp.html create mode 100644 lemoncurry/debug.py diff --git a/entries/kinds.py b/entries/kinds.py index e55ddc6..416d6a2 100644 --- a/entries/kinds.py +++ b/entries/kinds.py @@ -14,6 +14,10 @@ class Entry: def entry(self): return self.plural + '_entry' + @property + def entry_amp(self): + return self.entry + '_amp' + @property def atom(self): return self.plural + '_atom' diff --git a/entries/models.py b/entries/models.py index cf1e127..235adbf 100644 --- a/entries/models.py +++ b/entries/models.py @@ -140,6 +140,14 @@ class Entry(ModelMeta, TimeStampedModel): args.append(self.slug) return reverse('entries:' + kind.entry, args=args) + @property + def amp_url(self): + kind = kinds.from_id[self.kind] + args = [self.id] + if kind.slug: + args.append(self.slug) + return reverse('entries:' + kind.entry_amp, args=args) + @property def slug(self): return slugify(self.name) diff --git a/entries/templates/entries/entry.html b/entries/templates/entries/entry.html index a22b0bd..53ec6cf 100644 --- a/entries/templates/entries/entry.html +++ b/entries/templates/entries/entry.html @@ -1,7 +1,10 @@ {% extends 'lemoncurry/layout.html' %} {% load shorturl static %} -{% block head %}{% endblock %} +{% block head %} + + +{% endblock %} {% block styles %} diff --git a/entries/templates/entries/entry_amp.html b/entries/templates/entries/entry_amp.html new file mode 100644 index 0000000..4410c44 --- /dev/null +++ b/entries/templates/entries/entry_amp.html @@ -0,0 +1,89 @@ +{% load favtags jsonify lemoncurry_tags markdown theme_colour %} + + + + {{ entry.title }} ~ {% site_name %} + + + + {% placeFavicon %} + + + + + + + +
+ {% site_name %} +
+ +
+
+ {% if entry.name %} +

{{ entry.name }}

+ {% endif %} + +
+ {{ entry.content | markdown }} +
+
+
+ + diff --git a/entries/templates/entries/h-entry.html b/entries/templates/entries/h-entry.html index 3acf77e..c799aab 100644 --- a/entries/templates/entries/h-entry.html +++ b/entries/templates/entries/h-entry.html @@ -35,6 +35,10 @@ {{ entry.updated | naturaltime }} {% endif %} + + + amp + {% shortlink entry as short %} {{ short | friendly_url }} diff --git a/entries/urls.py b/entries/urls.py index 60b2c56..f7b5dfe 100644 --- a/entries/urls.py +++ b/entries/urls.py @@ -31,6 +31,7 @@ for k in kinds.all: url(to_pat(kind, page), views.index, name=k.index, kwargs={'kind': k}), url(to_pat(kind, '/atom'), feeds.AtomByKind(k), name=k.atom), url(to_pat(kind, '/rss'), feeds.RssByKind(k), name=k.rss), + url(to_pat(kind, id, slug, '/amp'), views.entry_amp, name=k.entry_amp), url(to_pat(kind, id, slug), views.entry, name=k.entry), ) diff --git a/entries/views.py b/entries/views.py index bded656..5678b56 100644 --- a/entries/views.py +++ b/entries/views.py @@ -54,3 +54,11 @@ def entry(request, id, slug=None): 'title': entry.title, 'meta': entry.as_meta(request) } + + +@render_to('entries/entry_amp.html') +def entry_amp(request, id, slug=None): + entry = Entry.objects.get(pk=id) + if request.path != entry.amp_url: + return redirect(entry.amp_url, permanent=True) + return {'entry': entry} diff --git a/lemoncurry/debug.py b/lemoncurry/debug.py new file mode 100644 index 0000000..d518f52 --- /dev/null +++ b/lemoncurry/debug.py @@ -0,0 +1,7 @@ +from debug_toolbar.middleware import show_toolbar as core_show_toolbar + + +def show_toolbar(request): + if request.path.endswith('/amp'): + return False + return core_show_toolbar(request) diff --git a/lemoncurry/settings/base.py b/lemoncurry/settings/base.py index 68ced74..81f50cd 100644 --- a/lemoncurry/settings/base.py +++ b/lemoncurry/settings/base.py @@ -223,6 +223,12 @@ AGENT_COOKIE_SECURE = True # django-cors-headers CORS_ORIGIN_ALLOW_ALL = True +# django-debug-toolbar +# https://django-debug-toolbar.readthedocs.io/en/stable/configuration.html +DEBUG_TOOLBAR_CONFIG = { + 'SHOW_TOOLBAR_CALLBACK': 'lemoncurry.debug.show_toolbar', +} + # django-shorturls # https://pypi.python.org/pypi/django-shorturls SHORTEN_MODELS = {