Django 从表单上传重定向

Django redirect from form upload

来自页面

This page isn’t working. If the problem continues, contact the site owner.
HTTP ERROR 405

从终端

Method Not Allowed (POST): /
Method Not Allowed: /
[20/Dec/2021 22:00:27] "POST / HTTP/1.1" 405 0

点击页面上传后如何重定向到同一页面。

form.html->包含在 sidebar.html-> 包含在 home.html

<form method = "POST" action='.' enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Upload</button>
</form>

views.py

from django.shortcuts import render
from .forms import UserProfileForm

def index(request):
    print(request.POST)
    return render(request,'home.html')

urls.py

from django.conf import settings
from django.urls import path
from django.views.generic.base import TemplateView # new

urlpatterns = [
    path('', TemplateView.as_view(template_name='home.html'), name='home'), 
]

由于您重定向到同一页面,我假设您在网页上提供表单时也发出了获取请求。 但是当页面作为对 GET 请求的响应时,它不应该在 POST 属性中包含一个空字典。 因此,它提供了一个错误。 据我说

def index(request):
    if request.method == "POST" :
        print(request.POST)
    return render(request,'home.html')

应该可以解决问题

参考 Django 文档

请求可以通过 POST 使用空的 POST 字典传入 – 如果通过 POST HTTP 方法请求表单但不包括表格数据。因此,您不应该使用 if request.POST 来检查是否使用了 POST 方法;相反,使用 if request.method == "POST"

进一步参考 - https://docs.djangoproject.com/en/3.2/ref/request-response/

在你的urls.py

更改为:

path(' ', index, name = 'home'),

而且您还必须在 urls.py

中导入您的视图