Django 无法搜索“不允许的方法”

我是 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

扫描.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>


感谢您花时间阅读,请帮助我,我真的需要这样做。


三国纷争
浏览 45回答 1
1回答

喵喔喔

默认情况下, [ ListViewDjango-doc]不会实现 POST 请求的处理程序。搜索通常通过 GET 请求完成,因此您应该使用:<form class="box" action="{% url 'result' %}" method="GET">    <h1>Product Check</h1>    <p> Please enter the serial id of your product to check it.</p>    <input type="text" name="q" placeholder="Serial Number">    <input type="submit" placeholder="Check"></form>此外<input type="submit">不应该有name="q"属性。您还可以将文本框的类型更改为type="search"[mozilla] :<form class="box" action="{% url 'result' %}" method="GET">    <h1>Product Check</h1>    <p> Please enter the serial id of your product to check it.</p>    <input type="search" name="q" placeholder="Serial Number">    <input type="submit" placeholder="Check"></form>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python