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
'Album.DoesNotExist: '' else'に 'return'文を追加します。 '__contains'を実行している場合は、1つ以上の結果が期待できます。' Album.objects.filter'を使用してみてください。 –
@Sayseテンプレートでフォームを使用する方法を詳しく説明できますか? – Sanskriti