我有一个index.html,我的表单已经实现了:
...
{% block searchform%} {% endblock %}
...
在我的搜索/文件夹中,我有两个文件。
search.html,这是index.html的实际表单
{% extends 'index.html' %}
{% block searchform %}
<form method="get" action="/results/">
<table>
{{ form.as_table }}
<tr>
<td> </td>
<td>
<input type="submit" value="Search">
</td>
</tr>
</table>
{% endblock %}
和文件result.html,我想看到我的搜索结果:
{% if query %}
<h3>Results</h3>
...
{% endif %}
urls.py:
from django.conf.urls import include, patterns, url
from dev_devices.views import *
urlpatterns = patterns('',
url(r'^$', include('haystack.urls')),
url(r'^results/$', results, name = 'results')
)
view.py
def results(request):
return render_to_response('results.html')
我的问题是,没有结果显示出来。当我单击表单的提交按钮时,我将重定向到正确的文件(results.html),但没有显示任何结果。这个问题已经存在,但我找不到答案,所以有人可以帮助我吗?谢谢!
答案 0 :(得分:0)
好吧,您没有将任何结果传递给模板。查看您的views.py
:
def results(request):
return render_to_response('results.html')
您的模板具有以下逻辑:
{% if query %}
<h3>Results</h3>
...
{% endif %}
query
不是上下文中的变量。您必须从视图中传递查询:
def results(request):
return render_to_response('results.html', {'query': 'some query'})
但更重要的是,您需要从Haystack获得实际结果并将其放在上下文中。我觉得你对这里发生的事感到困惑。如果要对搜索/结果使用haystacks默认视图,则根本不应定义任何自定义视图。定义结果视图的方式,Django如何知道这个页面与Haystack有什么关系呢?
如果做想要定义自定义视图,那么这些视图需要实现Haystack搜索表单,创建SearchQuerySets,分页(等等),并将该数据传递给模板。请参阅有关创建自己的视图的Haystack文档:
http://django-haystack.readthedocs.org/en/latest/views_and_forms.html#creating-your-own-view
如果您只想查看结果并且此特定网址结构对您来说并不重要,那么只需将表单操作更改为指向同一页面action=""
,然后将结果显示逻辑从{{1}移开到results.html
。这应该可以获得Haystacks默认视图和表单附带的基本搜索结果。