You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单图片上传失败:POST / 404未找到问题求助

Django图片上传出现「404 POST / not found」错误排查解决

问题描述

开发支持用户上传图片至Django的网页时,点击上传按钮后出现「404 POST / not found」错误,无法完成图片上传操作。

相关代码配置

HTML代码

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

settings.py

STATIC_URL = 'static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
STATICFILES_DIRS = (os.path.join(BASE_DIR,"static"), )

Lightings应用models.py

from django.db import models
from django.contrib.auth.models import User

class MovieImage(models.Model):
    image_upload=models.ImageField(null=True,blank=True,upload_to="userimages/")

Lightings应用forms.py

from django import forms
from .models import *

class MovieImageForm(forms.ModelForm):
    class Meta:
        model=MovieImage
        fields=('image_upload',)
        labels={
            'image_upload':'',
        }

Lightings应用views.py

from django.shortcuts import render
from .forms import MovieImageForm
from .models import *

def startlighting(request):
    return render(request,'Lightings.html')

def index(request):
    if request.method == "POST":
        form=MovieImageForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            return render(request,"Lightings.html")
    else: 
        form=MovieImageForm()
    return render(request,'Lightings.html',{'form':form})

项目级urls.py

from django.contrib import admin
from django.urls import path,include
from homepage.views import start
from About.views import aboutstart
from Lightings.views import startlighting
from django.conf import settings
from django.conf.urls.static import static
from Lightings.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path("home",start),
    path("About",aboutstart),
    path("Lightings",startlighting),
    path("Lightings",index)
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

报错截图

点击上传按钮时的报错截图

问题原因分析

  1. 路由重复与缺失:项目urls.py中存在两个相同的path("Lightings", ...),Django会优先匹配第一个startlighting视图,导致处理上传逻辑的index视图无法被访问;同时缺少根路径(/)的路由配置,若用户直接访问根路径,表单提交到/时无对应处理视图,引发404。
  2. 视图与表单不匹配:startlighting视图仅返回模板,未传递表单对象,且不处理POST请求,若用户通过/Lightings访问页面,表单提交后无法被正确处理。
  3. 表单action相对路径问题:表单action="."会提交到当前页面URL,若当前URL对应的视图无POST处理逻辑,就会触发404。

解决方案

1. 修正URL路由配置

修改项目级urls.py,确保路由唯一且正确映射到处理上传的视图:

from django.contrib import admin
from django.urls import path,include
from homepage.views import start
from About.views import aboutstart
from Lightings.views import index
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path("home", start),
    path("About", aboutstart),
    # 将/Lightings映射到处理上传的index视图
    path("Lightings", index),
    # 可选:添加根路径路由,让用户访问/也能使用上传功能
    path("", index)
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 优化视图逻辑(可选)

合并冗余视图,确保index视图同时处理表单显示与上传逻辑:

# Lightings/views.py
from django.shortcuts import render
from .forms import MovieImageForm

def index(request):
    if request.method == "POST":
        form = MovieImageForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            # 上传成功后重置表单,避免重复提交
            return render(request, "Lightings.html", {"form": MovieImageForm()})
    else:
        form = MovieImageForm()
    return render(request, "Lightings.html", {'form': form})

# 可删除无用的startlighting视图

3. 确认表单action配置

将表单action指定为明确的上传路径,避免相对路径问题:

<form action="/Lightings" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit" class="btn btn-lg btn-success">Upload</button>
</form>

4. 验证依赖与数据库迁移

确保安装了处理图片所需的Pillow库,执行数据库迁移:

pip install pillow
python manage.py makemigrations
python manage.py migrate

验证

启动Django服务器,访问/Lightings或/,上传图片后检查media/userimages/目录是否生成上传的图片,确认无404错误。

内容的提问来源于stack exchange,提问作者Tharun nivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:49:55