2013-05-11 63 views
0

我是很新的Django的形式。我在我的views.py這個方法:麻煩實施的Django搜索欄網站廣泛

def search(request): 
register.inclusion_tag('blog/search.html')(search) 
template = loader.get_template('blog/search.html') 
if request.method == 'POST': 
    form = Search(request.POST) 
    if form.is_valid(): 
     return HttpResponseRedirect('/search/?'+request.POST) 
else 
    form = Search() 
context = Context({ 
       'form':form 
       }) 
return HttpResponse(template.render(context)) 

與此相應的表單類:

from django import forms 

class Search(forms.form): 
    search = forms.CharField(max_length=65) 

然後在我的模板,我有

{% search %} 

現在我知道我是一個火車殘骸...但我真的需要一些指導。此搜索欄在全網範圍內存在。請幫助我。我收到一個非常通用的錯誤消息,指出我的urls.py模塊有問題。但是,我知道情況並非如此,因爲在我開始構建搜索部分之前,它運行良好。

腳本的一點是要顯示的線沿線的東西:

<input type="text" name="search" id="id_search" /> 

根據Django文檔。

謝謝你在前進, 最大的菜鳥

回答

3

有一些問題與本 - 開始與事實register.inclusion_tag是自定義模板標籤,必須在特定的目錄結構。

所以我的理解是要創建一個自定義模板標籤,這將在任何模板的任何地方呈現你的搜索形式,通過使用{% search %}

現在,您可以創建自定義標籤,或者你可以簡單地添加的形式,您的基本模板,使用模板繼承確保的形式,每一頁顯示出來。我的建議是創建一個標準搜索表單,將其添加到您的基本模板(任何其他模板將繼承的模板)。這通常稱爲_ base.html但它可以被稱爲任何東西。

因此,首先,你寫的觀點:

def search(request): 
    query = request.GET.get('q') 
    if query: 
     # There was a query entered. 
     results = SomeModel.objects.filter(somefield=query) 
    else: 
     # If no query was entered, simply return all objects 
     results = SomeModel.objects.all() 
    return render(request, 'search_result.html', {'results': results}) 

接下來,電線它在你的urls.py

url(r'^search/$', 'app.views.search','search'), 

最後,將其添加到您的形式(這是_ 基地。 HTML):

<form method="GET" action="{% url 'search' %}"> 
     <input type="text" name="q" /> 
     <input type="submit" /> 
</form>