summaryrefslogtreecommitdiff
path: root/app/posts/views/guide_views.py
blob: c5fdd5556401a1744d1ddb68ec44b2a1c1acbd7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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, LuxDetailView

from ..models import Post, PostType
from taxonomy.models import Category


class GuideListView(PaginatedListView):
    """
    Return a list of Entries in reverse chronological order
    """
    model = Post
    template_name = "posts/guide_base.html"

    def get_queryset(self):
        queryset = super(GuideListView, self).get_queryset()
        return queryset.filter(status__exact=1).filter(post_type__in=[PostType.REVIEW,PostType.FIELD_TEST]).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image')


class GuideTopicListView(PaginatedListView):
    """
    Return a list of Posts by topic in reverse chronological order
    """
    model = Post
    template_name = "posts/guide_by_topic.html"

    def get_queryset(self):
        queryset = super(GuideTopicListView, self).get_queryset()
        topic = Category.objects.get(slug=self.kwargs['topic'])
        return queryset.filter(status__exact=1).filter(topics__slug=topic.slug).order_by('-pub_date').prefetch_related('featured_image')

    def get_context_data(self, **kwargs):
        context = super(GuideTopicListView, self).get_context_data(**kwargs)
        topic = Category.objects.get(slug=self.kwargs['topic'])
        context['topic'] = topic
        context['breadcrumbs'] = ('Guides', topic.name )


        Category.objects.get(slug=self.kwargs['topic'])
        return context


class ReviewsListView(GuideListView):
    template_name = "posts/post.html"

    def get_queryset(self):
        queryset = super(ReviewsListView, 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(ReviewsListView, self).get_context_data(**kwargs)
        context['archive_type'] = 'Field Tests' 
        return context


class NotesListView(PaginatedListView):
    model = Post
    template_name = "posts/note_list.html"

    def get_queryset(self):
        queryset = super(NotesListView, self).get_queryset()
        return queryset.filter(site__domain='luxagraf.net').filter(post_type__in=[PostType.NOTE]).filter(status__exact=1).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image')

    def get_context_data(self, **kwargs):
        '''
        override for custom breadcrumb path
        '''
        # Call the base implementation first to get a context
        context = super(NotesListView, self).get_context_data(**kwargs)
        context['breadcrumbs'] = ('Notes',)
        return context



class NoteDetailView(LuxDetailView):
    model = Post 
    slug_field = "slug"

    def get_queryset(self):
        queryset = super(EssayDetailView, self).get_queryset()
        return queryset.select_related('location').prefetch_related('field_notes')

    def get_context_data(self, **kwargs):
        context = super(EssayDetailView, self).get_context_data(**kwargs)
        related = []
        for obj in self.object.related.all():
            model = apps.get_model(obj.model_name.app_label, obj.model_name.model)
            related.append(model.objects.get(slug=obj.slug, pub_date=obj.pub_date))
        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 PostDetailView(LuxDetailView):
    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.model_name.app_label, obj.model_name.model)
            related.append(model.objects.get(slug=obj.slug, pub_date=obj.pub_date))
        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