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.
This commit is contained in:
parent
66269276e5
commit
ffb123c184
|
@ -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() )
|
||||
|
|
|
@ -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 })
|
||||
return render_response(request, 'main/error.html', {'error_msg': error_msg,'info_area' : info_area })
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
</script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="/djagenmedia/script.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -45,7 +46,7 @@
|
|||
{% blocktrans %}<li><a href="{{ BASE_URL }}/english">İngilizce Günlükler</a></li>{% endblocktrans %}
|
||||
<li><a href="#" id="arsiv">Arşiv</a>
|
||||
<ul class="navlist">
|
||||
<li><a href="{{ BASE_URL }}/query/">{% trans "Ara" %}</a></li>
|
||||
<li><a href="{{ BASE_URL }}/search/">{% trans "Ara" %}</a></li>
|
||||
{% for dt in last_date_li %}
|
||||
<li><a href="{{ BASE_URL }}/archive/{{ dt|date:"Y/m/d"}}">{{ dt|date:"d.m.Y" }}</a>
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,37 +1,34 @@
|
|||
{% extends "main/base.html" %}
|
||||
{% block body %}
|
||||
|
||||
<form action="{{ BASE_URL }}/query/" method="POST" enctype="multipart/form-data">
|
||||
<form action="{{ BASE_URL }}/search/" method="POST" enctype="multipart/form-data">
|
||||
<table border="0px">
|
||||
{% for field in q_form %}
|
||||
<tr>
|
||||
<div class="fieldWrapper">
|
||||
<td>{{ field.label_tag }}</td>
|
||||
|
||||
|
||||
<td>
|
||||
{{ field }}
|
||||
</td>
|
||||
{% if field.help_text %}
|
||||
<td>
|
||||
<span class="small">
|
||||
{{ field.help_text }}
|
||||
</span>
|
||||
</td>
|
||||
{% endif %}
|
||||
{% if field.errors %}
|
||||
|
||||
{% if field.errors %}
|
||||
<td>
|
||||
<span class="error">
|
||||
{{ field.errors }}
|
||||
</span>
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<div class="spacer"></div>
|
||||
<input type="submit" value="Listele" />
|
||||
<input type="submit" value="Ara!" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
102
DJAGEN/branches/mustafa_branch/djagen/templates/main/searchresult.html
Executable file
102
DJAGEN/branches/mustafa_branch/djagen/templates/main/searchresult.html
Executable file
|
@ -0,0 +1,102 @@
|
|||
{% extends "main/base.html" %}
|
||||
|
||||
|
||||
{% block body %}
|
||||
{% if entries_list|length %}
|
||||
{% for entry in p_entries_list.object_list|slice:items_per_page %}
|
||||
{% autoescape off %}
|
||||
|
||||
{% ifequal entry.entry_id.is_approved 1 %}
|
||||
|
||||
{% ifchanged entry.date.day entry.date.month entry.date.year %}<div class="separator"></div>{% endifchanged %}
|
||||
|
||||
{% ifchanged %}<h2 class="date">{{ entry.date|date:"d F Y" }}</h2>{% endifchanged %}
|
||||
|
||||
<div class="innercontent">
|
||||
|
||||
<a href="{{ entry.entry_id.channel_link }}" title="{{ entry.entry_id.channel_title }}"><img class="face" src="/djagenmedia/images/heads/{{ entry.entry_id.author_face|default:"nobody.png" }}" title="{{ entry.entry_id.author_name }} {{ entry.entry_id.author_surname }}" width="80" height="80" /></a>
|
||||
<h1 class="title"><a href="{{ entry.link }} ">{{ entry.title }}</a></h1>
|
||||
<p class="yazaneden">
|
||||
Yazar: <a href="{{ entry.entry_id.channel_link }}" title="{{ entry.entry_id.channel_title }}">{{ entry.entry_id.author_name }} {{ entry.entry_id.author_surname }}</a>
|
||||
Tarih: <span class="blogdate">{{ entry.date|date:"d F Y H:i" }}</span>
|
||||
</p>
|
||||
<div class="blogcontent">
|
||||
{{ entry.content_html|truncatewords_html:truncate_words }}
|
||||
</div>
|
||||
{% endifequal %}
|
||||
{% endautoescape %}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
<div class="pagination">
|
||||
<span class="step-links">
|
||||
|
||||
{% if q_author_name or q_author_surname or q_text %}
|
||||
<span class="current">
|
||||
Sayfa <b>{{ p_entries_list.number }}</b> / <b>{{ p_entries_list.paginator.num_pages }}</b>
|
||||
</span>
|
||||
|
||||
<div class="pagelist" style="text-align:center">
|
||||
{% if p_entries_list.has_previous %}
|
||||
<a href="?q_author_name={{ q_author_name }}&q_author_surname={{ q_author_surname }}&q_text={{ q_text }}&page={{ p_entries_list.previous_page_number }}">Geri</a>
|
||||
{% endif %}
|
||||
|
|
||||
|
||||
{% for pNum in p_entries_list.paginator.page_range %}
|
||||
{% ifequal pNum p_entries_list.number %}
|
||||
{{ pNum }}
|
||||
{% else %}
|
||||
<a href="?page={{ pNum }}">{{ pNum }}</a>
|
||||
{% endifequal %}
|
||||
{% endfor %}
|
||||
|
||||
|
|
||||
{% if p_entries_list.has_next %}
|
||||
<a href="?q_author_name={{ q_author_name }}&q_author_surname={{ q_author_surname }}&q_text={{ q_text }}&page={{ p_entries_list.next_page_number }}">İleri</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
<span class="current">
|
||||
Sayfa <b>{{ p_entries_list.number }}</b> / <b>{{ p_entries_list.paginator.num_pages }}</b>
|
||||
</span>
|
||||
|
||||
<div class="pagelist" style="text-align:center">
|
||||
{% if p_entries_list.has_previous %}
|
||||
<a href="?q_author_name=?page={{ p_entries_list.previous_page_number }}">Geri</a>
|
||||
{% endif %}
|
||||
|
|
||||
|
||||
{% for pNum in p_entries_list.paginator.page_range %}
|
||||
{% ifequal pNum p_entries_list.number %}
|
||||
{{ pNum }}
|
||||
{% else %}
|
||||
<a href="?page={{ pNum }}">{{ pNum }}</a>
|
||||
{% endifequal %}
|
||||
{% endfor %}
|
||||
|
||||
|
|
||||
{% if p_entries_list.has_next %}
|
||||
<a href="?page={{ p_entries_list.next_page_number }}">İleri</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<br>
|
||||
<br>
|
||||
<h1><center>Gösterecek veri yok!</center></h1>
|
||||
<br>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
@ -28,7 +28,7 @@ urlpatterns = patterns('',
|
|||
(r'^archive/(?P<archive_year>\d{4})/$', archive),
|
||||
(r'^archive/(?P<archive_year>\d{4})/(?P<archive_month>\d{1,2})/$', archive),
|
||||
(r'^archive/(?P<archive_year>\d{4})/(?P<archive_month>\d{1,2})/(?P<archive_day>\d{1,2})/$', archive),
|
||||
(r'^query/$',query),
|
||||
(r'^search/$',query),
|
||||
)
|
||||
urlpatterns += patterns('',
|
||||
url(r'^captcha/', include('captcha.urls')),
|
||||
|
|
Loading…
Reference in New Issue
Block a user