from itertools import chain import json from django.urls import reverse from django.http import Http404, HttpResponse from django.views.generic import ListView, DetailView from django.apps import apps from django.shortcuts import render_to_response from django.shortcuts import render from django.template import RequestContext from photos.models import LuxImage, LuxVideo from recordings.models import Audio BREADCRUMBS = { 'SrcPost':'SRC', 'Book':'Book Notes', 'Entry':'Jrnl' } class PaginatedListView(ListView): """ handles my own pagination system and breadcrumbs """ context_object_name = 'object_list' def dispatch(self, request, *args, **kwargs): path = request.path.split('/')[1:-1] if path[-1] == self.kwargs['page']: path = "/".join(t for t in path[:-1]) request.page_url = "/" + path + '/%d/' else: request.page_url = request.path + '%d/' print(request.page_url) request.page = int(self.kwargs['page']) request.base_path = path return super(PaginatedListView, self).dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): ''' Adds breadcrumb path to every view ''' # Call the base implementation first to get a context context = super(PaginatedListView, self).get_context_data(**kwargs) try: context['breadcrumbs'] = (BREADCRUMBS[self.model.__name__],) except KeyError: context['breadcrumbs'] = (self.model._meta.verbose_name_plural,) return context class LuxDetailView(DetailView): """ handles breadcrumbs for detail pages """ def get_context_data(self, **kwargs): ''' Adds breadcrumb path to every view ''' # Call the base implementation first to get a context context = super(LuxDetailView, self).get_context_data(**kwargs) print(self.object._meta.verbose_name_plural) try: context['breadcrumbs'] = (BREADCRUMBS[self.object._meta.model],) except KeyError: if self.object._meta.verbose_name_plural == 'posts': context['breadcrumbs'] = (self.object.get_post_type_display()+"s",) context['crumb_url'] = "/%ss/" % self.object.get_post_type_display() else: context['breadcrumbs'] = (self.object._meta.verbose_name_plural,) try: context['crumb_url'] except KeyError: try: context['crumb_url'] = reverse('%s:list' % self.object._meta.verbose_name_plural) except: # special case for pages: context['breadcrumbs'] = (self.object.title,) context['crumb_url'] = None return context def insert_image(request): """ The view that handles the admin insert image/video feature """ images = LuxImage.objects.all()[:80] videos = LuxVideo.objects.all()[:10] audio = Audio.objects.all()[:40] object_list = sorted( chain(images, videos, audio), key=lambda instance: instance.pub_date, reverse=True ) return render(request, 'admin/insert_images.html', {'object_list': object_list, 'textarea_id': request.GET['textarea']}) def nav_json(request, app, model, pk): model = apps.get_model(app_label=app, model_name=model) p = model.objects.get(pk=pk) data = {} data['prev'] = p.get_previous_admin_url data['next'] = p.get_next_admin_url data = json.dumps(data) return HttpResponse(data)