# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.views.generic import ListView, DetailView, FormView from django.utils import translation from django.http import HttpResponseRedirect, HttpResponse from django.template import RequestContext from django.core.context_processors import csrf from django.http import Http404 from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext as _ #models from place_conference.models import PlaceConference from country.models import Country from city.models import City from models import PlaceExposition def catalog(request): expo = list(PlaceExposition.objects.all()) conf = list(PlaceConference.objects.all()) places = expo+conf args = {'objects': places} return render_to_response('place_catalog.html', args, context_instance=RequestContext(request)) def place(request, url, photo=None): try: place = PlaceConference.objects.get(url=url) except PlaceConference.DoesNotExist: try: place = PlaceExposition.objects.get(url=url) except: raise Http404 args = {'place': place} if photo: args['object'] = place return render_to_response('photoreport.html', args, context_instance=RequestContext(request)) return render_to_response('place.html', args, context_instance=RequestContext(request)) from functions.custom_views import ExpoSearchView from functions.search_forms import PlaceSearchForm class PlaceSearchView(ExpoSearchView): #paginate_by = 10 template_name = 'place/search.html' search_form = PlaceSearchForm model = PlaceExposition class PlaceDetail(DetailView): model = PlaceExposition search_form = PlaceSearchForm slug_field = 'url' template_name = 'client/place/place_detail.html' def get_object(self, queryset=None): """ Returns the object the view is displaying. By default this requires `self.queryset` and a `pk` or `slug` argument in the URLconf, but subclasses can override this to return any object. """ # Use a custom queryset if provided; this is required for subclasses # like DateDetailView if queryset is None: queryset = self.get_queryset() # Next, try looking up by primary key. pk = self.kwargs.get(self.pk_url_kwarg, None) slug = self.kwargs.get(self.slug_url_kwarg, None) if pk is not None: queryset = queryset.filter(pk=pk) # Next, try looking up by slug. elif slug is not None: slug_field = self.get_slug_field() queryset = queryset.filter(**{slug_field: slug}) # If none of those are defined, it's an error. else: raise AttributeError("Generic detail view %s must be called with " "either an object pk or a slug." % self.__class__.__name__) try: # Get the single item from the filtered queryset obj = queryset.get() except queryset.model.DoesNotExist: try: PlaceConference.objects.get(url=slug) except PlaceConference.DoesNotExist: raise Http404(_("No %(verbose_name)s found matching the query") % {'verbose_name': queryset.model._meta.verbose_name}) return obj def get_context_data(self, **kwargs): context = super(PlaceDetail, self).get_context_data(**kwargs) context['search_form'] = self.search_form return context class PlacePhoto(ListView): template_name = 'client/place/photo.html' obj = None search_form = PlaceSearchForm def get_queryset(self): slug = self.kwargs.get('slug') try: place = PlaceExposition.objects.get(url=slug) except PlaceExposition.DoesNotExist: try: place = PlaceConference.objects.get(url=slug) except PlaceConference.DoesNotExist: raise Http404(_("No %(verbose_name)s found matching the query") % {'verbose_name': PlaceExposition._meta.verbose_name}) self.obj = place return place.photogallery.photos.all() def get_context_data(self, **kwargs): context = super(PlacePhoto, self).get_context_data(**kwargs) context['object'] = self.obj context['search_form'] = self.search_form return context class PlaceList(ListView): model = PlaceExposition paginate_by = 10 template_name = 'client/place/place_list.html' search_form = PlaceSearchForm def get_queryset(self): lang = translation.get_language() qs = super(PlaceList, self).get_queryset().filter(language_code=lang).order_by('-rating') conf_qs = PlaceConference.objects.language().all() return list(qs)+list(conf_qs) def get_context_data(self, **kwargs): context = super(PlaceList, self).get_context_data(**kwargs) context['search_form'] = self.search_form return context class PlaceCatalog(ListView): model = PlaceExposition paginate_by = 10 template_name = 'place/catalog.html' search_form = PlaceSearchForm filter_object = None def get_context_data(self, **kwargs): context = super(PlaceCatalog, self).get_context_data(**kwargs) context['search_form'] = self.search_form context['filter_object'] = self.filter_object context['catalog_url'] = self.catalog_url return context class PlaceCountryCatalog(PlaceCatalog): catalog_url = '/places/' def get_queryset(self): slug = self.kwargs.get('slug') country = get_object_or_404(Country, url=slug) self.filter_object = country qs = self.model.objects.language().filter(country=country).order_by('-rating') conf_qs = PlaceConference.objects.language().filter(country=country) return list(qs) + list(conf_qs) class PlaceCityCatalog(PlaceCatalog): catalog_url = '/places/' def get_queryset(self): slug = self.kwargs.get('slug') city = get_object_or_404(City, url=slug) self.filter_object = city qs = self.model.objects.language().filter(city=city).order_by('-rating') conf_qs = PlaceConference.objects.language().filter(city=city) return list(qs) + list(conf_qs)