summaryrefslogtreecommitdiffstats
path: root/askbot/views
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-03-30 23:43:47 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-03-30 23:43:47 -0400
commit0459ee4316cd6a593284f6786cb84140d1b19e54 (patch)
treec0f5672f48a1ecb7b1e982724d12ce61af3b027d /askbot/views
parent6a309f8c659da57eb113c9e08099528452040f3c (diff)
downloadaskbot-0459ee4316cd6a593284f6786cb84140d1b19e54.tar.gz
askbot-0459ee4316cd6a593284f6786cb84140d1b19e54.tar.bz2
askbot-0459ee4316cd6a593284f6786cb84140d1b19e54.zip
dry-refactored the tags view
Diffstat (limited to 'askbot/views')
-rw-r--r--askbot/views/readers.py102
1 files changed, 40 insertions, 62 deletions
diff --git a/askbot/views/readers.py b/askbot/views/readers.py
index fa39426c..b0cf0eca 100644
--- a/askbot/views/readers.py
+++ b/askbot/views/readers.py
@@ -244,42 +244,51 @@ def questions(request, **kwargs):
def tags(request):#view showing a listing of available tags - plain list
+ #1) Get parameters. This normally belongs to form cleaning.
+ sortby = request.GET.get('sort', 'used')
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ if sortby == 'name':
+ order_by = 'name'
+ else:
+ order_by = '-used_count'
+
+ query = request.GET.get('query', '').strip()
tag_list_type = askbot_settings.TAG_LIST_FORMAT
- if tag_list_type == 'list':
+ #2) Get query set for the tags.
+ query_params = {'deleted': False}
+ if query != '':
+ query_params['name__icontains': query]
- stag = ""
- is_paginated = True
- sortby = request.GET.get('sort', 'used')
- try:
- page = int(request.GET.get('page', '1'))
- except ValueError:
- page = 1
-
- stag = request.GET.get("query", "").strip()
- if stag != '':
- objects_list = Paginator(
- models.Tag.objects.filter(
- deleted=False,
- name__icontains=stag
- ).exclude(
- used_count=0
- ),
- DEFAULT_PAGE_SIZE
- )
- else:
- if sortby == "name":
- objects_list = Paginator(models.Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("name"), DEFAULT_PAGE_SIZE)
- else:
- objects_list = Paginator(models.Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("-used_count"), DEFAULT_PAGE_SIZE)
+ tags_qs = Tag.objects.filter(**query_params).exclude(used_count=0)
+ tags_qs = tags_qs.order_by(order_by)
+
+ #3) Start populating the template context.
+ data = {
+ 'active_tab': 'tags',
+ 'page_class': 'tags-page',
+ 'tag_list_type' : tag_list_type,
+ 'stag' : query,
+ 'tab_id' : sortby,
+ 'keywords' : query,
+ 'search_state': SearchState(*[None for x in range(7)])
+ }
+
+ if tag_list_type == 'list':
+ #plain listing is paginated
+ objects_list = Paginator(tags_qs, DEFAULT_PAGE_SIZE)
try:
tags = objects_list.page(page)
except (EmptyPage, InvalidPage):
tags = objects_list.page(objects_list.num_pages)
paginator_data = {
- 'is_paginated' : is_paginated,
+ 'is_paginated' : (objects_list.num_pages > 1),
'pages': objects_list.num_pages,
'page': page,
'has_previous': tags.has_previous(),
@@ -289,45 +298,14 @@ def tags(request):#view showing a listing of available tags - plain list
'base_url' : reverse('tags') + '?sort=%s&amp;' % sortby
}
paginator_context = functions.setup_paginator(paginator_data)
- data = {
- 'active_tab': 'tags',
- 'page_class': 'tags-page',
- 'tags' : tags,
- 'tag_list_type' : tag_list_type,
- 'stag' : stag,
- 'tab_id' : sortby,
- 'keywords' : stag,
- 'paginator_context' : paginator_context,
- }
-
+ data['paginator_context'] = paginator_context
else:
-
- stag = ""
- sortby = request.GET.get('sort', 'name')
-
- if request.method == "GET":
- stag = request.GET.get("query", "").strip()
- if stag != '':
- tags = models.Tag.objects.filter(deleted=False, name__icontains=stag).exclude(used_count=0)
- else:
- if sortby == "name":
- tags = models.Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("name")
- else:
- tags = models.Tag.objects.all().filter(deleted=False).exclude(used_count=0).order_by("-used_count")
-
+ #tags for the tag cloud are given without pagination
+ tags = tags_qs
font_size = extra_tags.get_tag_font_size(tags)
+ data['font_size'] = font_size
- data = {
- 'active_tab': 'tags',
- 'page_class': 'tags-page',
- 'tags' : tags,
- 'tag_list_type' : tag_list_type,
- 'font_size' : font_size,
- 'stag' : stag,
- 'tab_id' : sortby,
- 'keywords' : stag,
- 'search_state': SearchState(*[None for x in range(7)])
- }
+ data['tags'] = tags
return render(request, 'tags.html', data)