2014-01-16 50 views
0

在草垛教程草垛搜索功能,草垛爲下面的網址定義:我怎麼可以在任何URL

(r'^search/', include('haystack.urls')) 

是否意味着草垛是可用於在/搜索/結尾的任何URL?

如果是這樣,我怎麼能在任何不需要在/ search /中結束的網址實現haystack?例如,我想在www.example.com來實現搜索功能,並且不希望創建www.example.com/search/

感謝

回答

1

這意味着,假設這是你的根urls.py是您可以使用開始/search/的任何網址獲得搜索視圖。您可以放置​​任何要替換的東西r'^search/'

請注意,通常在您的搜索表單顯示的網址與實際提供結果的網址之間存在差異。例如,搜索表單可能位於每個頁面上,但搜索結果需要轉到您提到的URLconf中的視圖。

因此,例如,將搜索框放在您的模板中包含搜索表單的每個頁面上。這可能是這樣的

<form action="/search/" method="get"> 
{{ mysearchform.as_p }} 
<input type="submit" value="Search"/> 
</form> 

這將查詢發送到勢必www.example.com/search/這將是你的結果頁面視圖。然後,在你的URLconf你會簡單地把

from haystack.views import SearchView 
from haystack.forms import SearchForm 

... 

url(r'^search/', SearchView(form_class=SearchForm)) 

而獲得這種形式的正確行爲(有它保留了搜索詞時,用戶得到的結果頁面,例如),你可以做一個上下文處理器會將此表格上下文中的所有觀點:

from haystack.forms import SearchForm 

def my_search(request): 
    form = SearchForm() 
    return {'mysearchform': form} 

請注意,因爲它被傳遞給每一個頁面,你必須命名的背景下,作爲比form其他一些形式,包括管理界面和form將與衝突管理員登錄表單(即你無法登錄)。