可能有一些包可以自动为您提供所有内容,显示查询集列表并允许简单添加搜索栏等(如管理站点)。但我认为你仍然是 Web 开发的初学者,所以我强烈建议你放弃列表视图,放弃 haystack,放弃一切,自己动手。
看,它们不是坏方法或任何东西,但它们就像捷径。只有当它们缩短原始方式时,快捷方式才是好的,在您的情况下,它并没有那么长。
举个例子,这里有一个显示项目列表的简单方法:
视图.py
def restaraunt_list(request):
restaraunts = Restaraunt.objects.all().order_by('name')[:100] # Just for example purposes. You can order them how you'd like, and you probably want to add pagination instead of limiting the view number arbitrarily
context = {'restaraunts': restaraunts}
return render_to_response('index.html', context)
索引.html:
<ul>
{% for rest in restaraunts %}
<li>{{ rest }}</li>
{% endfor %}
</ul>
而已。现在它显示在列表中。现在要添加搜索过滤器,您需要做的就是:
index.html(在任何你想要的地方添加它)
<form>
<input type='text' name='q' id='q'></input>
<input type='submit' value='search!'></input>
</form>
当用户从 'q' 发送数据时,它通过 GET 发送,然后在服务器端添加:
def restaraunt_list(request):
restaraunts = Restaraunt.objects.all()
# filter results!
if request.method == 'GET':
q = request.GET['q']
if q != '':
restaraunts = restaraunts.filter(name__contains=q)
# ordering is the last thing you do
restaraunts = restaraunts.order_by('name')[:100]
context = {'restaraunts': restaraunts}
return render_to_response('index.html', context)
现在,这将起作用,但是根据您所写的内容,我了解您希望搜索在按下键的那一刻生效。为此,您需要使用 AJAX(去了解它是如何工作的,我不会在这里深入研究)。至于自动完成,您应该查看jQuery UI。
但是,就像我说的,在继续使用所有这些东西之前,我建议你先学习基础知识。浏览django 教程(如果你还没有的话),并在每一步都使用非常详细的 django-docs。当某些特定的事情不起作用并且您遇到困难时,请来到 Stackoverflow,一定有人会帮助您。祝你好运!