Just as a small followup, this is exactly how I was able to re-use my function in place:
From views.py
def search(request, filter_range):
search_ref = BibleReference(filter_range)
qry_in_range = "SELECT * FROM concordance_reference WHERE ref_book_num=%s AND ref_endchapter_num >= %s AND ref_endverse_num >= %s AND ref_startchapter_num <= %s AND ref_startverse_num <= %s ORDER BY ref_book_num, ref_startchapter_num, ref_startverse_num, ref_endchapter_num, ref_endverse_num"
params = tuple([search_ref.book_num, search_ref.start_chapter, search_ref.start_verse, search_ref.end_chapter, search_ref.end_verse])
found_references_list = VerseReference.objects.raw(qry_in_range, params)
template = loader.get_template('concordance/index.html')
context = RequestContext( request, {
'filter_range': filter_range,
'filter_ref': search_ref,
'found_references_list': found_references_list,
})
return HttpResponse(template.render(context))
def empty_search(request):
filter_range = request.GET.get('filter_range', '')
return search(request, filter_range)
Urls.py
url(r'^search/$', views.empty_search, name='empty_search'),
url(r'^search/(?P<filter_range>.+)$', views.search, name='search'),
The advantage of this approach is that my restful urls:
/search/1+Timothy remain good, and
/search/?filter_range=1+Timothy can still be called from my form.