【问题标题】:Django: Search EngineDjango:搜索引擎
【发布时间】:2016-12-31 03:24:57
【问题描述】:

我正在尝试在 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 新手。

【问题讨论】:

  • 你试过设置断点吗?您已经制作了一个表单,但是您在模板中完全忽略了它,它可能有错误,但是由于您的视图没有返回响应,因此应该会产生不同的错误
  • 请捕获except Album.DoesNotExist: 之类的异常,并在else 中添加return 语句。此外,如果您正在执行__contains,您应该期望的不仅仅是 1 个结果,请尝试使用 Album.objects.filter
  • @Sayse 能否详细说明如何在模板中使用表单?

标签: python django


【解决方案1】:

在访问cleaned_data之前必须调用form.is_valid()

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2011-09-15
    • 2015-04-03
    • 2011-07-01
    • 2011-05-21
    • 2011-01-19
    相关资源
    最近更新 更多