From c95c80ba092947ae3f7cfcc5eb02976d18d00247 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Fri, 1 Mar 2013 14:25:21 +0100 Subject: [PATCH] Allow no tags. Sort tags by usage, hide unused. --- menu/helpers.py | 7 ++++++- prawokultury/menu_items.py | 10 ++-------- questions/models.py | 2 +- questions/views.py | 13 ++++++++----- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/menu/helpers.py b/menu/helpers.py index 15d8646..33e90b7 100755 --- a/menu/helpers.py +++ b/menu/helpers.py @@ -15,7 +15,12 @@ class MenuItem(object): def is_active(self, request, value): url = request.get_full_path() - return url == str(self.url) or url in set(str(url) for url in self.more_urls) + if url.startswith(str(self.url)): + return True + for other_url in self.more_urls: + if url.startswith(str(other_url)): + return True + return False def check_active(self, request, value): try: diff --git a/prawokultury/menu_items.py b/prawokultury/menu_items.py index 2a85fd6..1da9c69 100644 --- a/prawokultury/menu_items.py +++ b/prawokultury/menu_items.py @@ -14,8 +14,7 @@ ITEMS.append(ObjectMenuItem( ITEMS.append(ModelMenuItem(Entry, reverse_lazy('migdal_entry_list_publications'), field_lookups={'type': 'publications'}, title=_('Publications'))) -ITEMS.append(MenuItem(reverse_lazy('events'), _('Events'), - more_urls=(reverse_lazy('events_past'),))) +ITEMS.append(MenuItem(reverse_lazy('events'), _('Events'))) ITEMS.append(ObjectMenuItem( obj_get=lambda:Category.objects.get(slug_pl='stanowisko'), @@ -23,12 +22,7 @@ ITEMS.append(ObjectMenuItem( title=_('Positions') )) -ITEMS.append(MenuItem(reverse_lazy('questions'), _('First aid'), - more_urls=( - reverse_lazy('questions_form'), - #reverse_lazy('questions_question'), - reverse_lazy('questions_thanks'), - ))) +ITEMS.append(MenuItem(reverse_lazy('questions'), _('First aid'))) ITEMS.append(ObjectMenuItem( obj_get=lambda:Entry.published_objects.get(slug_pl='pierwsza-pomoc'), diff --git a/questions/models.py b/questions/models.py index 1540191..ed86730 100644 --- a/questions/models.py +++ b/questions/models.py @@ -45,7 +45,7 @@ class Question(models.Model): help_text=_('Check to display answered question on site.')) published_at = models.DateTimeField(_('published at'), null=True, blank=True, db_index=True) - tags = TaggableManager(through=TagItem) + tags = TaggableManager(through=TagItem, blank=True) class Meta: ordering = ['-created_at'] diff --git a/questions/views.py b/questions/views.py index b68d24b..9c75ac6 100644 --- a/questions/views.py +++ b/questions/views.py @@ -3,6 +3,8 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.core.urlresolvers import reverse_lazy +from django.db import models +from django.shortcuts import get_object_or_404 from django.views.generic import ListView from django.views.generic.edit import FormView from .forms import QuestionForm @@ -24,20 +26,21 @@ class QuestionListView(ListView): self.tag = None if 'tag' in request.GET: try: - self.tag = Tag.objects.get(slug=request.GET['tag']) - except Tag.DoesNotExist: + self.tag = Tag.objects.filter(items__question__published=True, slug=request.GET['tag'])[0] + except IndexError: pass return super(QuestionListView, self).get(request, *args, **kwargs) def get_queryset(self): qs = Question.objects.filter(published=True ).order_by('-published_at') - if 'tag' in self.request.GET: - qs = qs.filter(tags__slug=self.request.GET['tag']) + if self.tag: + qs = qs.filter(tags=self.tag) return qs def get_context_data(self, *args, **kwargs): context = super(QuestionListView, self).get_context_data(*args, **kwargs) - context['tags'] = Tag.objects.all() + context['tags'] = Tag.objects.filter(items__question__published=True + ).annotate(c=models.Count('items__tag')).order_by('-c', 'slug') context['tag'] = self.tag return context -- 2.20.1