2016-08-24 12 views
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を初めて使っています。

+1

ブレークポイントの設定を試しましたか?フォームを作成しましたが、テンプレート内で完全に無視するとエラーが発生する可能性がありますが、ビューで応答が返されないため別のエラーが発生する – Sayse

+0

'Album.DoesNotExist: '' else'に 'return'文を追加します。 '__contains'を実行している場合は、1つ以上の結果が期待できます。' Album.objects.filter'を使用してみてください。 –

+0

@Sayseテンプレートでフォームを使用する方法を詳しく説明できますか? – Sanskriti

答えて

0

form.is_valid()は、cleaned_dataにアクセスする前に呼び出す必要があります。

+0

私はそれをやってみました。それでも動作しません。 – Sanskriti