0

我对使用 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 文档。

提前谢谢你,最大的菜鸟

4

1 回答 1

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>
于 2013-05-11T13:43:06.910 回答