from django.views.generic import ListView from django.views.generic.detail import DetailView from django.contrib.syndication.views import Feed from django.apps import apps from django.conf import settings from utils.views import PaginatedListView from .models import Post from taxonomy.models import Category class PostList(PaginatedListView): """ Return a list of Entries in reverse chronological order """ model = Post def get_queryset(self): queryset = super(PostList, self).get_queryset() return queryset.filter(status__exact=1).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image') class GuidesListView(PostList): def get_queryset(self): queryset = super(GuidesListView, self).get_queryset() return queryset.filter(post_type__in=[0,1]).filter(status__exact=1).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image') def get_context_data(self, **kwargs): context = super(GuidesListView, self).get_context_data(**kwargs) context['archive_type'] = 'Guides' return context class EssayListView(PostList): template_name = "posts/essay_list.html" def get_queryset(self): queryset = super(EssayListView, self).get_queryset() return queryset.filter(post_type__in=[2,]).filter(status__exact=1).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image') class PostDetailView(DetailView): model = Post slug_field = "slug" def get_queryset(self): queryset = super(PostDetailView, self).get_queryset() return queryset.select_related('location').prefetch_related('field_notes') def get_context_data(self, **kwargs): context = super(PostDetailView, self).get_context_data(**kwargs) related = [] for obj in self.object.related.all(): model = apps.get_model(obj.post_model.app_label, obj.post_model.model) related.append(model.objects.get(slug=obj.slug)) context['related'] = related return context def get_template_names(self): obj = self.get_object() return ["posts/%s_detail.html" % obj.get_post_type_display(), 'posts/post_detail.html'] class PostDetailViewTXT(PostDetailView): template_name = "posts/entry_detail.txt" class PostsRSSFeedView(Feed): title = "VanLifeReviews.com: " link = "/" description = "Latest reviews, stories and guides" description_template = 'feeds/blog_description.html' def items(self): return Post.objects.filter(status__exact=1).order_by('-pub_date')[:10] def item_pubdate(self, item): """ Takes an item, as returned by items(), and returns the item's pubdate. """ return item.pub_date