2016-08-24 180 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

請注意像'except Album.DoesNotExist: '並在'else'中添加'return'語句。另外,如果您正在執行'__contains',則應該期望得到的不僅僅是1個結果,請嘗試使用'Album.objects.filter' –

+0

@Sayse您可以詳細說明如何在模板中使用表單嗎? – Sanskriti

回答

0

form.is_valid()必須在訪問cleaned_data之前調用。

+0

我試過這樣做。仍然無法工作。 – Sanskriti