From 8ad496d5f7bfbcf67473532bb26c804cf478910c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 29 Dec 2019 18:04:14 +0100 Subject: [PATCH] views: add compatibility with URLs with embedded date --- chloro/phyll/urls.py | 1 + chloro/phyll/views.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/chloro/phyll/urls.py b/chloro/phyll/urls.py index 99d6da6..1418810 100644 --- a/chloro/phyll/urls.py +++ b/chloro/phyll/urls.py @@ -39,6 +39,7 @@ urlpatterns = [ staff_member_required(views.NoteDeleteView.as_view(), login_url='login'), ), url(r'^new-note/$', staff_member_required(views.NoteAddView.as_view(), login_url='login')), + url(r'^(?P\d{4})/(?P\d{2})/(?P\d{2})/(?P[\w:-]+)/$', views.NoteView.as_view()), url(r'^(?P[\w:-]+)/$', views.NoteView.as_view()), url(r'^$', views.HomeView.as_view()), ] diff --git a/chloro/phyll/views.py b/chloro/phyll/views.py index d366b83..5387b70 100644 --- a/chloro/phyll/views.py +++ b/chloro/phyll/views.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from django.http import Http404 from django.views.generic import CreateView, DeleteView, DetailView, UpdateView, TemplateView from .models import Note @@ -22,6 +23,19 @@ from .models import Note class NoteView(DetailView): model = Note + def get(self, request, *args, **kwargs): + if kwargs.get('year'): + # check date does match + note = self.get_object() + creation = self.get_object().creation_timestamp + if (creation.year, creation.month, creation.day) != ( + int(kwargs['year']), + int(kwargs['month']), + int(kwargs['day']), + ): + raise Http404() + return super(NoteView, self).get(request, *args, **kwargs) + class NoteEditView(UpdateView): model = Note -- 2.39.2