I would like to have a search box integrated into a nav bar that appears on the top of each page (hey, there is an example of what I am talking about up there at the top of this StackOverflow page).
Perhaps the nav.html may look like:
<ul id="menu">
<li><a href="/products"></li>
<li><a href="/service"></li>
<li>{{ nav_search_form.as_p }}</li>
</ul>
Perhaps forms.py may contain:
class NavSearchForm(forms.Form):
query = forms.CharField(max_length=30, required=False)
With the DRY principle I do not want views.py to be looking for a 'query' on every page like:
def ProductsPage(request):
search_form = NavSearchForm()
if request.GET.has_key('query'):
query = request.GET['query'].strip()
# deal with 'Products' here...
def ServicePage(request):
search_form = NavSearchForm()
if request.GET.has_key('query'):
query = request.GET['query'].strip()
# deal with 'Service' here...
I have and can easily program a page that will handle the search query and show results. How do you best extract the search terms and direct the user to that search page (return HttpResponseRedirect('/results/?query=' + query)) without stripping the request.GET on every page?
Just have the search form do a GET on your common search URL.
<form action="/search/" method="get">
...
</form>
Use the URL reverse lookup facility if you don't want to hardwire the URL...
<form action="{% url my-search-view %}" method="get">
...
</form>
Unless I misunderstood the question, it sounds like maybe you were thinking that forms have to get/post to the same URL that loaded the current page.