Change: Searching

created on Oct. 17, 2012, 9:53 p.m. by Hevok & updated on Oct. 17, 2012, 10:01 p.m. by Hevok

A basic search function that passes an initial value could look like this: ::

def search(request, q=None): if request.POST: from = SearchForm(request.POST) if form.is_valid(): q = form.cleaned_data['q'] url = reverse('search_results', args=(q,)) return HttpResponseRedirect(url) if q is None: form = SearchForm() else: form = SearchForm(initial={'q': q}) return render_to_response('search.html', {'form': form})

For search page its good to use a GET form and maintain state in the URL: ::

# views.py
def search(request):
    q = request.GET.get('q', '').strip()
    results = get(q)
    render_to_response("search.html", {'q': q, 'results': results})

# search.html
<form method="GET" action=".">
<p><input type="test" value="{{ q }}" .? <input type="submit" value="Search" /></p>
{% if q %}
    {% if results %}
        {% for entry in results %}
            {{ entry }}
        {% endfor %}
    {% else %}
       <p>No results</p>
    {% endif %}
{% endif %}
</form>

Tags: form, template, search
Categories: Tutorial
Parent: Web Framework

Comment: Added an alternative implementation of a search function.

See entry | Admin

Comment on This Data Unit