Denigma
hevok @hevok October 17, 2012
Tutorial #form #search #template

Searching

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

{% if q %}
    {% if results %}
        {% for entry in results %}
            {{ entry }}
        {% endfor %}
    {% else %}


No results

    {% endif %}
{% endif %}