From: Frédéric Péters Date: Sun, 29 Dec 2019 17:04:14 +0000 (+0100) Subject: views: add compatibility with URLs with embedded date X-Git-Tag: v2022~53 X-Git-Url: https://git.0d.be/?p=chloro.git;a=commitdiff_plain;h=8ad496d5f7bfbcf67473532bb26c804cf478910c views: add compatibility with URLs with embedded date --- 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