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 从表单上传重定向的主要内容,如果未能解决你的问题,请参考以下文章