Django:搜索引擎
问题描述:
我想在Django中进行排序的搜索引擎,用户通过表单输入查询并在数据库中存在查询时获取输出。这里是我的代码:Django:搜索引擎
urls.py:
from django.conf.urls import url
from django.contrib import admin
from Search import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', views.form),
url(r'^search/', views.data,name='search'),
]
models.py:
from __future__ import unicode_literals
from abc import ABCMeta
from django.db import models
# Create your models here.
class Album(models.Model):
artist = models.CharField(max_length=100)
album_title = models.CharField(max_length=100)
genre = models.CharField(max_length=100)
album_logo = models.CharField(max_length=100)
def __str__(self):
return self.album_title + "-" + self.artist
views.py:
from django.http import HttpResponse,Http404
from models import Album
from forms import FormQuery
from django.shortcuts import render
from django.template import loader
from . import *
def data(request):
if request.method=='POST':
form=FormQuery(request.POST)
data=form.cleaned_data
value=data['query']
if form.is_valid():
try:
album1 = Album.objects.get(artist__contains=value)
return render(request,'Search/form.html',{'album':album1})
except:
raise Http404("Does not exist.")
else:
return render(request,'Search/form.html')
forms.py:
from django import forms
class FormQuery(forms.Form):
query=forms.CharField()
form.html:
<form action="{% url 'search' %}" method="POST">{% csrf_token %}
<fieldset>
Enter an album:<br>
<input type="text" name="query" ><br>
<input type="submit" value="Submit for Search >>">
</fieldset>
</form>
{% if album %}
<h1>{{ album }}</h1>
{% endif %}
然而,当我键入查询时,我看到了URL变化,但页面是一样的,我的结果(专辑名称)将不显示。我是Django的新手。
您是否尝试过设置断点?你已经创建了一个表单,但你完全忽略了它的模板,它可能存在错误,但是这会产生一个不同的错误,因为你的视图没有返回响应 – Sayse
请注意像'except Album.DoesNotExist: '并在'else'中添加'return'语句。另外,如果您正在执行'__contains',则应该期望得到的不仅仅是1个结果,请尝试使用'Album.objects.filter' –
@Sayse您可以详细说明如何在模板中使用表单吗? – Sanskriti