From ffb123c184bd3b9d62ff4af302ddc7636a94c05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mustafa=20Ar=C4=B1c=C4=B1?= Date: Sun, 12 Jun 2011 12:14:57 +0000 Subject: [PATCH] Searching feature is fixed. Now it can search for entries properly. * /search/ url matched mapped to query() view. * model filtering process has taken from the query() view fnc. to a distinct fnc. in order to provide reusability. --- .../mustafa_branch/djagen/collector/forms.py | 13 +- .../mustafa_branch/djagen/collector/views.py | 127 +++++++++++++----- .../djagen/templates/main/base.html | 3 +- .../djagen/templates/main/query.html | 19 ++- .../djagen/templates/main/searchresult.html | 102 ++++++++++++++ DJAGEN/branches/mustafa_branch/djagen/urls.py | 2 +- 6 files changed, 213 insertions(+), 53 deletions(-) create mode 100755 DJAGEN/branches/mustafa_branch/djagen/templates/main/searchresult.html diff --git a/DJAGEN/branches/mustafa_branch/djagen/collector/forms.py b/DJAGEN/branches/mustafa_branch/djagen/collector/forms.py index 02f937a..b2e0dab 100755 --- a/DJAGEN/branches/mustafa_branch/djagen/collector/forms.py +++ b/DJAGEN/branches/mustafa_branch/djagen/collector/forms.py @@ -4,6 +4,7 @@ from django import forms from captcha.fields import CaptchaField from datetime import date +from django.contrib.admin import widgets class ContactForm(forms.Form): @@ -20,6 +21,12 @@ class QueryForm(forms.Form): q_author_name = forms.CharField(max_length=25, required = False, label = 'Adı') q_author_surname = forms.CharField(max_length=25, required = False, label = 'Soyadı') q_text = forms.CharField(required = False, label = 'Aradığınız metin', widget = forms.widgets.Textarea() ) - - - q_date = forms.DateField(required = False, initial=date.today,label = "Tarih",widget = forms.widgets.DateInput(format="%d-%m-%Y"), help_text="Örn: 21-11-2010") + + q_label_personal = forms.BooleanField(required = False, label = 'Kişisel Günlükler', initial = True) + q_label_lkd = forms.BooleanField(required = False, label = 'LKD Günlükleri', initial = True) + q_label_community = forms.BooleanField(required = False, label = 'Topluluk Günlükleri') + q_label_eng = forms.BooleanField(required = False, label = 'İngilizce Günlükler') + + + q_date_from = forms.DateField(required = False, initial=date.today,label = "Şurdan",widget = widgets.AdminDateWidget() ) + q_date_till = forms.DateField(required = False, initial=date.today,label = "Şuraya",widget = widgets.AdminDateWidget() ) diff --git a/DJAGEN/branches/mustafa_branch/djagen/collector/views.py b/DJAGEN/branches/mustafa_branch/djagen/collector/views.py index c0d5caa..ee02977 100755 --- a/DJAGEN/branches/mustafa_branch/djagen/collector/views.py +++ b/DJAGEN/branches/mustafa_branch/djagen/collector/views.py @@ -115,7 +115,52 @@ def list_members(request): return render_response(request, 'main/members.html', {'members': authors, 'BASE_URL': BASE_URL,'info_area' : info_area }) +def __search(cleaned_data): + cdata = cleaned_data + q_author_name = cdata.get('q_author_name','') + q_author_surname = cdata.get('q_author_surname','') + q_text = cdata.get('q_text','') + + q_date_from = cdata.get('q_date_from','') + q_date_till = cdata.get('q_date_till','') + + q_label_personal = cdata.get('q_label_personal','') + q_label_community = cdata.get('q_label_community','') + q_label_lkd = cdata.get('q_label_lkd','') + q_label_eng = cdata.get('q_label_eng','') + + entries_list = Entries.objects.select_related() + # Name - surname queries. + + if(q_author_name): + entries_list = entries_list.filter(entry_id__author_name__iexact = q_author_name) + if(q_author_surname): + entries_list = entries_list.filter(entry_id__author_surname__iexact = q_author_surname) + + # Label based queries. + if(q_label_personal == True): + entries_list = entries_list.filter(entry_id__label_personal = 1) + if(q_label_community == True): + entries_list = entries_list.filter(entry_id__label_community = 1) + if(q_label_lkd == True): + entries_list = entries_list.filter(entry_id__label_lkd = 1) + if(q_label_eng == True): + entries_list = entries_list.filter(entry_id__label_eng = 1) + + + # Text search. + if(q_text): + entries_list = entries_list.filter(content_text__icontains = q_text) + + # Date based queries. + if(q_date_from and q_date_till): + entries_list = entries_list.filter(date__range = (q_date_from,q_date_till)) + + return entries_list + + def query(request): + # Determine if method is POST. if (request.method == 'POST'): ## If Yes: @@ -124,52 +169,60 @@ def query(request): # Determine if all of them were valid. if (form.is_valid()): cdata = form.cleaned_data - + entries_list = __search(cdata) + p_entries_list = entries_list - ## If Yes: + truncate_words = 250 + items_per_page = 25 - #q_author_name = request.POST.get('q_author_name','') - q_author_name = cdata.get('q_author_name','') - q_author_surname = cdata.get('q_author_surname','') - q_text = cdata.get('q_text','') + #get the last run time + run_time = RunTime.objects.all()[0] + info_area = 'search' - q_date = cdata.get('q_date','') - if (q_date != None): - - q_date_year = str(q_date.year) - q_date_month = str(q_date.month) - q_date_day = str(q_date.day) - else: - - q_date_year,q_date_month,q_date_day = None,None,None - - - # Redirect or call /archive/ view with the existing POST arguments. - #++ Complex string operations in order to form needed target_url. - args_part = "?q_author_name=%s&q_author_surname=%s&q_text=%s" % (q_author_name,q_author_surname,q_text) - date_part = '' - - - if (q_date_year): - date_part = q_date_year - if(q_date_month): - date_part += "/" + q_date_month - if(q_date_day): - date_part += "/" + q_date_day + "/" - target_url = BASE_URL+"/archive/" + date_part + args_part - #-- - return HttpResponseRedirect(target_url) - else: + # Pagination + elements_in_a_page = 25 # This determines, how many elements will be displayed in a paginator page. + paginator = Paginator(entries_list,elements_in_a_page) + # Validation for page number if it is not int return first page. + try: + page = int(request.GET.get('page', '1')) + except ValueError: + page = 1 + + # If page request is out of range, return last page . + try: + p_entries_list = paginator.page(page) + except (EmptyPage, InvalidPage): + p_entries_list = paginator.page(paginator.num_pages) + #-- + + + + return render_to_response('main/searchresult.html' ,{ + 'entries_list':entries_list, + 'p_entries_list':p_entries_list, + 'truncate_words':truncate_words, + 'items_per_page':repr(items_per_page), + 'run_time':run_time, + 'info_area':info_area, + #'q_author_name':q_author_name, + #'q_author_surname':q_author_surname, + #'q_text':q_text, + 'BASE_URL':BASE_URL, + }) + + + + """else: # Issue an error message and show the form again. - form = QueryForm() + form = SearchForm(request.POST) info_area = "query" - return render_to_response('main/query.html', {'q_form': form, 'BASE_URL': BASE_URL,'info_area':info_area}) + return render_to_response('main/query.html', {'q_form': form, 'BASE_URL': BASE_URL,'info_area':info_area})""" else: # Show the form. + info_area = 'query' form = QueryForm() - info_area = "query" return render_to_response('main/query.html', {'q_form': form, 'BASE_URL': BASE_URL,'info_area':info_area}) @@ -289,4 +342,4 @@ def issue_error(request,error_msg=None): info_area = 'error' if not(error_msg): error_msg = 'Bilinmeyen bir hata oluştu!' - return render_response(request, 'main/error.html', {'error_msg': error_msg,'info_area' : info_area }) \ No newline at end of file + return render_response(request, 'main/error.html', {'error_msg': error_msg,'info_area' : info_area }) diff --git a/DJAGEN/branches/mustafa_branch/djagen/templates/main/base.html b/DJAGEN/branches/mustafa_branch/djagen/templates/main/base.html index b2a0e84..713b69f 100755 --- a/DJAGEN/branches/mustafa_branch/djagen/templates/main/base.html +++ b/DJAGEN/branches/mustafa_branch/djagen/templates/main/base.html @@ -18,6 +18,7 @@ + {% endblock %} @@ -45,7 +46,7 @@ {% blocktrans %}
  • İngilizce Günlükler
  • {% endblocktrans %}
  • Arşiv