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