![](/img/trans.png)
[英]Django SearchVector doesn't work with search query containing whitespace
[英]Search in django doesn't work
我正在尝试在我的页面上使用搜索选项。 我已经尝试了标准django文档在此链接“ https://docs.djangoproject.com/en/1.11/intro/tutorial01/ ”中给出的方法,但是我的搜索功能无法正常工作。 只有网址从http://localhost:8000/contact
更改为http://localhost:8000/contact/your-contact/?q=harini
但数据并未过滤和显示。 我正在使用Django 1.11。 有人可以帮我吗? 提前致谢
models.py
from __future__ import unicode_literals
from django.db import models
class ContactModel(models.Model):
name = models.CharField(max_length=200)
dob = models.DateField()
phone_number = models.IntegerField()
gender = models.BooleanField()
address = models.CharField(max_length=200)
views.py
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from django.views import generic
from django.template.response import TemplateResponse
from django.views.generic import CreateView
from django.urls import reverse_lazy
from .models import ContactModel
from .forms import ContactForm
class ContactView(CreateView):
model_class = ContactModel
form_class = ContactForm
success_url = reverse_lazy('contact-thanks')
initial = {'name': 'value'}
template_name = 'contact/contact.html'
def get(self, request, *args, **kwargs):
model = self.model_class()
return render(request, self.template_name, {'model': ContactForm})
def post(self, request, *args, **kwargs):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('thanks/')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
class ContactlistView(CreateView):
model = ContactModel
template_name = 'contact/contactlist.html'
def search(request):
query = request.GET['q']
t = loader.get_template('template/contact/contactlist.html')
c = Context({ 'query': query,})
if query:
results = Contact.objects.filter(Q(name__icontains=query) |
Q(dob__icontains=query) |
Q(address__icontains=query) |
Q(gender__icontains=query) |
Q(phone_number__icontains=query))
return render(request, 'contactlist.html', {'form': form})
else:
return render(request, 'contactlist.html', {'form': form})
urls.py
from django.conf.urls import url
from . import views
app_name = 'contact'
urlpatterns = [
url(r'^$', views.ContactView.as_view(), name='contact'),
url(r'^your-contact/$', views.ContactView.as_view(), name='contact'),
url(r'^your-contact/thanks/$', views.ContactView.as_view(), name='contact'),
url(r'^contact-list/$', views.ContactlistView.as_view(), name='contactlist'),
url(r'^contact-list/your-contact/$', views.ContactlistView.as_view(), name='contactlist'),
]
templates / contact / contactlist.html
<form method="get" action="contact-list/">
<input type="text" id="searchBox" class="input-medium search-query" name="q" placeholder="Search" value= "{{ request.GET.q }}">
{% if contact %}
{% for each_contact in contacts %}
<h3>Name: {{ contact.name }}</h3>
<p>Dob: {{ contact.dob }}</p>
<p>Gender: {{ contact.gender }}</p>
<p>Address: {{ contact.address }}</p>
<p>Phone Number: {{ contact.phone_number}}</p>
{% endfor %}
{% endif %}
<input type="submit" class="btn" value="Search" >
</form>
您的表单操作指向your-contact/
<form method="get" action="your-contact/">
因此,此URL调用视图ContactView()
,而search
查询过程在ContactlistView()
视图中
class ContactlistView(CreateView):
''' '''
def search(request):
query = request.GET['q']
一个解决方案是: 对URL模式进行一些编辑:
url(r'^contact-list/$', views.ContactlistView.as_view(), name='contactlist'),
并更改表单操作网址并将其指向该视图ContactlistView():
with contact-list/
<form method="get" action="contact-list/">
不要忘记将
if q:
替换为if query:
我认为您现在拥有的视图无济于事,您应该在以下位置对其进行修改:
class ContactlistView(CreateView):
model = ContactModel
template_name = 'contact/contactlist.html'
def get(self, request):
query = request.GET['q']
t = loader.get_template('template/contact/contactlist.html')
c = Context({ 'query': query,})
if query:
results = Contact.objects.filter(Q(name__icontains=query) |
Q(dob__icontains=query) |
Q(address__icontains=query) |
Q(gender__icontains=query) |
Q(phone_number__icontains=query))
return render(request, 'contactlist.html', {'form': form})
else:
return render(request, 'contactlist.html', {'form': form})
另请注意以下几点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.