【发布时间】:2021-02-10 00:56:58
【问题描述】:
我是 django 的新手,我目前正在为我的朋友做一个网站。他想让我做一个系统,用户可以搜索数据库,网站根据他们的序列号给出相关项目。 我遵循以下站点的教程:https://learndjango.com/tutorials/django-search-tutorial 弄清楚如何进行数据库搜索,这很有帮助,但我仍然遇到问题:我的搜索栏有效,结果页面也有效,但只有当我手动时才有效自己在搜索栏上输入查询(例如 results/?q=number1)。但是,当我使用输入栏和提交按钮进行搜索时,它会将我发送到 /results/ 页面,页面给出了这个:
此页面无法正常工作
如果问题仍然存在,请联系网站所有者。
HTTP 错误 405
-当我打开 pycharm 以查看终端中的错误时,它说:
Method Not Allowed (POST): /result/
Method Not Allowed: /result/
[27/Oct/2020 20:06:02] "POST /result/ HTTP/1.1" 405 0
这是我的代码(python3.7,pycharm)网站/网址:
from . import views
from django.urls import path
from django.contrib.auth import views as auth_views
urlpatterns = [
path('register/',views.UserFormView.as_view(), name='register'),
path('login/', auth_views.LoginView.as_view(), name='login'),
path('', views.IndexViews.as_view(), name='index'),
path('scan/', views.ScanView.as_view(), name='scan'),
path('result/', views.SearchResultsView.as_view(), name='result'),
]
网站/浏览量:
class IndexViews(generic.ListView):
template_name = "websites/index.html"
context_object_name = "object_list"
def get_queryset(self):
return Website.objects.all()
class ScanView(TemplateView):
form_class = SerialFrom
template_name = 'websites/scan.html'
class SearchResultsView(ListView):
model = SerialNumber
template_name = 'websites/result.html'
def get_queryset(self): # new
query = self.request.GET.get('q')
context = self.get_context_data(object=self.object)
object_list = SerialNumber.objects.filter(
Q(number__iexact=query)
)
return object_list
scan.html:
{% extends 'websites/base.html' %}
{% block albums_active %}active{% endblock %}
{% block body %}
<head>
<meta charset="UTF-8">
<title>Scan</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<form class="box" action="{% url 'result' %}" method="POST">
<h1>Product Check</h1>
<p> Please enter the serial id of your product to check it.</p>
{% csrf_token %}
<input type="text" name="q" placeholder="Serial Number">
<input type="submit" name="q" placeholder="Check">
</form>
</body>
{% endblock %}
感谢您抽出宝贵的时间阅读,请帮助我,我真的需要这样做。
【问题讨论】:
-
使用 GET 而不是 POST 进行搜索的原因是,搜索不会改变应用程序或其数据库中的任何内容。它与列表 (ListView) 相同,只是它为用户提供了将列表中的项目减少为更相关的选项。
标签: python html django url redirect