【发布时间】: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 能否详细说明如何在模板中使用表单?