麻烦实施django搜索栏网站广泛

时间:2013-05-11 13:30:43

标签: python django forms

我对django表格很新。我在views.py中有这个方法:

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文档。

提前谢谢你, 最大的Noob

1 个答案:

答案 0 :(得分:4)

有一些问题 - 开始时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'),

最后,将其添加到您的表单(位于_ base.html 中):

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