Skip to content

Commit

Permalink
Make view compatible with Django 1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
Apostolos Bessas committed May 29, 2013
1 parent a19a54b commit 091dc53
Showing 1 changed file with 16 additions and 41 deletions.
57 changes: 16 additions & 41 deletions tagging/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,25 @@
"""
from django.http import Http404
from django.utils.translation import ugettext as _
from django.views.generic.list_detail import object_list

from django.views.generic import ListView
from tagging.models import Tag, TaggedItem
from tagging.utils import get_tag, get_queryset_and_model
from tagging.utils import get_tag

def tagged_object_list(request, queryset_or_model=None, tag=None,
related_tags=False, related_tag_counts=True, **kwargs):
"""
A thin wrapper around
``django.views.generic.list_detail.object_list`` which creates a
``QuerySet`` containing instances of the given queryset or model
tagged with the given tag.

In addition to the context variables set up by ``object_list``, a
``tag`` context variable will contain the ``Tag`` instance for the
tag.
class TagListView(ListView):

If ``related_tags`` is ``True``, a ``related_tags`` context variable
will contain tags related to the given tag for the given model.
Additionally, if ``related_tag_counts`` is ``True``, each related
tag will have a ``count`` attribute indicating the number of items
which have it in addition to the given tag.
"""
if queryset_or_model is None:
try:
queryset_or_model = kwargs.pop('queryset_or_model')
except KeyError:
raise AttributeError(_('tagged_object_list must be called with a queryset or a model.'))
queryset_or_model = None

if tag is None:
try:
tag = kwargs.pop('tag')
except KeyError:
raise AttributeError(_('tagged_object_list must be called with a tag.'))
def get_queryset(self):
tag = self.kwargs['tag']
self.tag_instance = get_tag(tag)
if self.tag_instance is None:
raise Http404(_('No Tag found matching "%s".') % tag)
return TaggedItem.objects.get_by_model(
self.queryset_or_model, self.tag_instance
)

tag_instance = get_tag(tag)
if tag_instance is None:
raise Http404(_('No Tag found matching "%s".') % tag)
queryset = TaggedItem.objects.get_by_model(queryset_or_model, tag_instance)
if not kwargs.has_key('extra_context'):
kwargs['extra_context'] = {}
kwargs['extra_context']['tag'] = tag_instance
if related_tags:
kwargs['extra_context']['related_tags'] = \
Tag.objects.related_for_model(tag_instance, queryset_or_model,
counts=related_tag_counts)
return object_list(request, queryset, **kwargs)
def get_context_data(self, **kwargs):
context = super(TagListView, self).get_context_data(**kwargs)
context['tag'] = self.tag_instance
return context

0 comments on commit 091dc53

Please sign in to comment.