[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Maposmatic-dev] [PATCH maposmatic 1/2] Implement basic search functiona
From: |
Maxime Petazzoni |
Subject: |
[Maposmatic-dev] [PATCH maposmatic 1/2] Implement basic search functionality |
Date: |
Tue, 19 Jan 2010 16:39:01 +0100 |
---
www/maposmatic/views.py | 35 ++++++++++++++++++++++++++++---
www/media/style.css | 1 -
www/templates/maposmatic/all_maps.html | 4 ++-
3 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/www/maposmatic/views.py b/www/maposmatic/views.py
index 452212a..fd56dff 100644
--- a/www/maposmatic/views.py
+++ b/www/maposmatic/views.py
@@ -27,7 +27,8 @@
from django.core.paginator import Paginator
from django.forms.util import ErrorList
from django.forms import CharField, ChoiceField, FloatField, Select,
RadioSelect, \
- ModelForm, ValidationError, IntegerField, HiddenInput
+ ModelForm, ValidationError, IntegerField,
HiddenInput, \
+ Form
from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, HttpResponseBadRequest,
HttpResponse
from django.utils.translation import ugettext_lazy as _
@@ -275,8 +276,32 @@ def get_letters():
# who don't?
return [chr(i) for i in xrange(ord('A'), ord('Z')+1)]
+class MapSearchForm(Form):
+ query = CharField(min_length=1, required=True)
+
def all_maps(request):
- map_list = (MapRenderingJob.objects.filter(status=2)
+ map_list = None
+
+ if request.method == 'POST':
+ form = MapSearchForm(request.POST)
+ if form.is_valid():
+ map_list = (MapRenderingJob.objects
+ .filter(status=2)
+ .filter(resultmsg='ok')
+ .filter(maptitle__icontains=form.cleaned_data['query'])
+ .order_by('maptitle')
+ .order_by('-submission_time'))
+ if len(map_list) == 1:
+ return HttpResponseRedirect('/jobs/%d' % map_list[0].id)
+
+ # TODO: find a way to have a working paginator with search. For
+ # now, just make sure we don't have more than ITEMS_PER_PAGE
+ # results.
+ map_list = map_list[:www.settings.ITEMS_PER_PAGE]
+ else:
+ form = MapSearchForm()
+
+ map_list = map_list or (MapRenderingJob.objects.filter(status=2)
.filter(resultmsg="ok")
.order_by("maptitle"))
paginator = Paginator(map_list, www.settings.ITEMS_PER_PAGE)
@@ -291,7 +316,8 @@ def all_maps(request):
except (EmptyPage, InvalidPage):
maps = paginator.page(paginator.num_pages)
return render_to_response('maposmatic/all_maps.html',
- { 'maps': maps, 'letters': get_letters() },
+ { 'maps': maps, 'letters': get_letters(),
+ 'form': form },
context_instance=RequestContext(request))
def all_maps_by_letter(request, letter):
@@ -314,7 +340,8 @@ def all_maps_by_letter(request, letter):
maps = paginator.page(paginator.num_pages)
return render_to_response('maposmatic/all_maps.html',
{ 'maps': maps, 'letters': get_letters(),
- 'current_letter': letter},
+ 'current_letter': letter,
+ 'form': MapSearchForm() },
context_instance=RequestContext(request))
def query_nominatim(request, format, squery):
diff --git a/www/media/style.css b/www/media/style.css
index da271e1..f24525e 100644
--- a/www/media/style.css
+++ b/www/media/style.css
@@ -271,7 +271,6 @@ table.jobinfo td.info {
div.mapsearch {
float: right;
- margin-top: 1em;
font-style: italic;
}
diff --git a/www/templates/maposmatic/all_maps.html
b/www/templates/maposmatic/all_maps.html
index 860c8a4..ac1b6f9 100644
--- a/www/templates/maposmatic/all_maps.html
+++ b/www/templates/maposmatic/all_maps.html
@@ -30,7 +30,9 @@
{% block menu-maps %}class="activelink"{% endblock %}
{% block page %}
-<div class="mapsearch"><!-- <input type="text" name="map_search" /><input
type="submit" value="{% trans "Search" %}" />-->{% trans "Search coming soon!"
%}</div>
+<div class="mapsearch">
+ <form action="{% url maps %}" method="post">{{ form.query }}<input
type="submit" value="{% trans "Search" %}" /></form>
+</div>
<h1><a href="{% url maps %}">{% trans "Maps" %}</a></h1>
--
1.6.3.3.277.g88938c
- [Maposmatic-dev] [PATCH maposmatic 1/2] Implement basic search functionality,
Maxime Petazzoni <=