首页 > 解决方案 > 不允许的方法(POST):/home/

问题描述

我有一个带有表单和数据表的单页应用程序。页面加载正常,但问题是当我按下“提交”按钮时表单不起作用。

当我按下“提交”按钮时,它给了我这个错误Method Not Allowed (POST): /home/ 谢谢你们的帮助!

视图.py

def _get_form(request, formcls, prefix):
    data = request.POST if prefix in request.POST else None
    return formcls(data, prefix=prefix)


all_items = List.objects.all

class Myview(TemplateView):
    template_name = 'data_list/home.html'
    all_items = List.objects.all

    def get(self, request, *args, **kwargs):
        return self.render_to_response({'scrape': Scrape(prefix="scrape_pre"), 'all_items': all_items})

    def scrape(self, request, *args, **kwargs):
        scrape = _get_form(request, Scrape, 'scrape_pre')
        if request.method == "POST":
            scrape = _get_form(request, Scrape, 'scrape_pre')
            if scrape.is_valid():
                print("Worked")

        return self.render_to_response({'scrape': scrape})


    def home(self, request, *args, **kwargs):
        all_items = List.objects.all
        return render(request, "data_list/home.html", {"all_items": all_items})

表格.py

class Scrape(forms.ModelForm):
    url = forms.CharField()

    class Meta:
        model = List
        fields = ["item", "site"]

网址.py

from django.urls import path, include
from . import views

urlpatterns = [
    path("", views.add, name="add"),
    path("scrape/", views.scrape, name="scrape"),
    path("home/", views.Myview.as_view(), name="home"),
    path("delete/<list_id>", views.delete, name="delete"),
    path("datacontent/<list_id>", views.datacontent, name="datacontent")
]

主页.html

<div>
    <form action="" method="post" >
    {% csrf_token %}
    {{ scrape|crispy }}
      <pre></pre>
    <button class="btn btn-outline-info" type="submit"  value="Submit">SUBMIT</button>
      <pre></pre><pre></pre><pre></pre><pre></pre>
</form>


</div>

<table class="table">
.....

标签: pythondjangoformsview

解决方案


如果您的后端没有实现负责响应发布请求的发布功能,则您无法发送发布请求(表单定义中的方法='发布')。您应该将“刮擦”功能更改为“发布”。


推荐阅读