0
我想在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