Using two different templates for search results - Haystack -
i totally confused how can use 2 different template files search results. suppose have 2 different pages searching , want have different decorations each page search results.
this search bar in 1 page:
<div class="main-header_search"> <form method="get" action="/search1" id="header_find_form" class="main-search yform" role="search" data-component-bound="true"> <div class="arrange arrange--middle arrange--6"> <div class="arrange_unit" style="width: 100%;"> <div class="main-search_suggestions-field search-field-container find-decorator"> <label class="main-search_pseudo-input pseudo-input"> <span class="pseudo-input_text">find</span> <span class="pseudo-input_field-holder"> <input autocomplete="off" type="search" id="id_q" maxlength="64" name="q" placeholder="cheap dinner, cafe" value="" class="main-search_field pseudo-input_field" aria-autocomplete="list" tabindex="1" data-component-bound="true"> </span> </label> <div class="main-search_suggestions suggestions-list-container search-suggestions-list-container hidden" data-component-bound="true"> <ul class="suggestions-list" role="listbox" aria-label="search results"></ul> </div> </div> </div> <div class="arrange_unit main-search_actions"> <button class="ybtn ybtn-primary main-search_submit" id="header-search-submit" tabindex="3" title="search" type="submit" value="search"> <i class="i ig-common_sprite i-search-common_sprite"></i> </button> </div> </div> </form> </div>
and in page:
<form method="get" name="business_search_form" class="yform business-search-form" action="/search2" role="search"> <div class="arrange arrange--6 arrange--stack"> <div class="arrange_unit arrange_unit--fill"> <div class="arrange arrange--equal arrange--6 arrange--stack"> <div class="arrange_unit"> <label class="responsive-visible-small-block hidden-non-responsive-block">business name</label> <div class="pseudo-input business-find-decorator"> <div class="flex-container-inline"> <div class="label responsive-hidden-small">business name</div> <div class="flex-box input-holder"> <input class="landing-search-biz-name" placeholder="e.g. mel's diner" name="q" autocomplete="off" type="text"> </div> </div> </div> </div> </div> </div> <div class="arrange_unit nowrap"> <button type="search" value="search" class="ybtn ybtn-primary yform-search-button ybtn-full-responsive-small"><span><span class="i-wrap ig-wrap-common i-search-dark-common-wrap"><i class="i ig-common i-search-dark-common"></i> started</span></span></button> </div> </div> </form>
i use in urls.py have 2 different templates each search results:
(r'^search1/', include('haystack.urls'), name='template1'), (r'^search2/', include('haystack.urls'),name='template2'),
i using simple haystack backend in setting.py:
haystack_connections = { 'default': { 'engine': 'haystack.backends.simple_backend.simpleengine', }, }
here how it:
first, create search form inherits haystack's searchform
:
class itemsearchform(searchform): def search(self, request): items = super(itemsearchform, self).search().models(item) // item model name shops = super(itemsearchform, self).search().models(shop) return {'items': items, 'shops': shops}
second, create views uses form:
def searchitems(request): form = itemsearchform(request.get) results = form.search(request) return render(request, 'search/search.html', { 'items': results['items'] }) def searchshops(request): form = itemsearchform(request.get) results = form.search(request) return render(request, 'search/search.html', { 'shops': results['shops'] })
please note these 2 views use different return
values. can change fix situation.
then, configure urls:
(r'^search1/', 'views.search1', name='search1'), (r'^search2/', 'views.search2', name='search2'),
the thing left do, write indexes
file , documents. should it.
Comments
Post a Comment