Django 从表单上传重定向

Posted

技术标签:

【中文标题】Django 从表单上传重定向【英文标题】:Django redirect from form upload 【发布时间】:2022-01-22 15:05:56 【问题描述】:

从页面

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'), 
]

【问题讨论】:

您可以添加您的urls.py 吗? 405 表示该方法不被允许,因此处理请求的视图不接受 POST 请求 好的,添加了 urls.py。 您有一个 TemplateView 为该路径提供服务,但它不接受 POST 请求。您问题中的视图根本没有使用 我应该把它换成 view,它应该对 django 的东西有点新。 您需要将 TemplateView 换成可以处理 GET 和 POST 请求的视图,FormView 可能工作或只是一个标准视图 【参考方案1】:

在你的 urls.py 中

改为:

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

您还必须在 urls.py 中导入您的视图

【讨论】:

【参考方案2】:

由于您重定向到同一页面,我假设您在网页上提供表单时也会发出获取请求。 但是当页面作为对 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。

以上是关于Django 从表单上传重定向的主要内容,如果未能解决你的问题,请参考以下文章

从 django 管理操作中间页面重定向到更改表单页面

Django 使用绑定表单重定向到另一个视图

Django 唯一 URL 重定向问题

从 Django HttpResponseRedirect 或重定向中删除锚名称

防止 Django 模板表单中的重定向

django HttpResponseRedirect 没有重定向