diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2013-03-30 23:43:47 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2013-03-30 23:43:47 -0400 |
commit | 0459ee4316cd6a593284f6786cb84140d1b19e54 (patch) | |
tree | c0f5672f48a1ecb7b1e982724d12ce61af3b027d /askbot/views | |
parent | 6a309f8c659da57eb113c9e08099528452040f3c (diff) | |
download | askbot-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.py | 102 |
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&' % 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) |