from django.conf.urls import url
from models import Album
-from views import AlbumListView
+from views import AlbumListView, PhotoListView, PhotoView
urlpatterns = [
url(r'^$', AlbumListView.as_view()),
- url(r'^(?P<slug>[^/]*)/$', 'photo.views.album_view'),
- url(r'^(?P<slug>[^/]*)/(?P<id>[0-9]+)/$', 'photo.views.photo_view'),
+ url(r'^(?P<slug>[^/]*)/$', PhotoListView.as_view()),
+ url(r'^(?P<slug>[^/]*)/(?P<id>[0-9]+)/$', PhotoView.as_view()),
]
-from django.views.generic import ListView
+from django.views.generic import ListView, DetailView
from django.http import Http404
from models import Album, Photo
context = super(AlbumListView, self).get_context_data(**kwargs)
return context
-def album_view(request, slug):
- try:
- album = Album.objects.get(slug__exact=slug)
- photos = Photo.objects.filter(album=album).order_by('order', 'image')
- except:
- raise Http404
- return django.views.generic.list_detail.object_list(request, photos, paginate_by=20, template_name='photo/photo_index.html', allow_empty=False)
-
-def photo_view(request, slug, id):
- try:
- id = int(id)
- album = Album.objects.get(slug__exact=slug)
+class PhotoListView(ListView):
+ model = Photo
+ paginate_by = 20
+ order_by = 'order, image'
+
+ def get_queryset(self):
+ album = Album.objects.get(slug__exact=self.kwargs['slug'])
+ return Photo.objects.filter(album=album)
+
+class PhotoView(DetailView):
+ model = Photo
+
+ def get_object(self, **kwargs):
+ return Photo.objects.get(id=self.kwargs['id'])
+
+ def get_context_data(self, **kwargs):
+ context = super(PhotoView, self).get_context_data(**kwargs)
+ album = Album.objects.get(slug__exact=self.kwargs['slug'])
photos = Photo.objects.filter(album=album).order_by('order', 'image')
- photo_qs = Photo.objects.filter(id=id)
+
found_prev = False
prev_photo = None
found_next = False
next_photo = None
+
for photo in photos:
if not found_prev:
- if not photo.id == id:
+ if not photo.id == int(self.kwargs['id']):
prev_photo = photo
else:
found_prev = True
if found_next:
next_photo = photo
break
- if photo.id == id:
+ if photo.id == int(self.kwargs['id']):
found_next = True
- except:
- raise Http404
- return django.views.generic.list_detail.object_detail(request, photo_qs, object_id=id, template_name='photo/photo.html', extra_context={"next_photo": next_photo, "prev_photo": prev_photo })
+
+ context['next_photo'] = next_photo
+ context['prev_photo'] = prev_photo
+
+ return context
+