如何在Django中实现可以访问完整数据库的搜索



My views.py

class SearchView(TemplateView):
template_name = 'search.html'
def get(self, request, *args, **kwargs):
q = request.GET.get('q', '')
self.results = Item.objects.filter(title__icontains=q)
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
return super().get_context_data(results=self.results, **kwargs)

我的urls . py

url(r'^search/$', SearchView.as_view(), name='search')

我search.html

{% extends 'base.html' %} {% load static %} {% block content %}
<body>
<h1>Search Result</h1>
<ul>
{% for item in q %}
<li>
{{ q.title }}, {{ q.price }}
</li>
{% endfor %}
</ul>
</body>
{% endblock%}}

我nav.html

<form method="GET" action="{% url 'core:search' %}">

这是我使用的代码,但由于一些缺失或错误在这上面的代码我不能得到任何数据,如果我在我的网站做任何搜索,可以有人请告诉我什么是错误我做了。谢谢你。

我Models.py

class Item(models.Model):
title = models.CharField(max_length=50)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
model_no = models.CharField(max_length=100)

try this:

def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
context['results'] = self.results
return context

在html

{% extends 'base.html' %} 
{% load static %} 
{% block content %}
<body>
<h1>Search Result</h1>
<ul>
{% for item in results %}
<li>
{{ item.title }}, {{ item.price }}
</li>
{% endfor %}
</ul>
</body>
{% endblock%}}

最新更新