当我试图向表单提交照片时,Django应用程序崩溃

2024-04-27 00:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个django应用程序,我在其中创建了一个表单。当我在表单上提交图像时,我单击图像图标,应用程序自动崩溃,我在终端中看到:django.utils.datastructures.MultiValueDictKeyError:'photo' '''

 {% extends "auctions/layout.html" %}

{% block body %}
    <h2>Create New Listing</h2>

    <form action="{% url 'newListing' %}" method="post">
        {% csrf_token %}
        <div class="form-group">
            <input autofocus class="form-control" type="text" name="title" placeholder="Title">
        </div>
        <div class="form-group">
            <input class="form-control" type="text" name="description" placeholder="Description">
        </div>
        <div class="form-group">
            <input class="form-control" type="number" name="bid" placeholder="Price">
        </div>
        <div class="form-group">
            <input class="form-control" type="image" name="photo" placeholder="Image">
        </div>
        <input class="btn btn-primary" type="submit" value="Post">
    </form>

{% endblock %}
'''
views.py
'''

    from django.contrib.auth import authenticate, login, logout
from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.contrib.auth.decorators import login_required


from .models import User


def index(request):
    return render(request, "auctions/index.html")


def login_view(request):
    if request.method == "POST":

        # Attempt to sign user in
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)

        # Check if authentication successful
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse("index"))
        else:
            return render(request, "auctions/login.html", {
                "message": "Invalid username and/or password."
            })
    else: #if user didnt just fill form they need to go to login page to do that
        return render(request, "auctions/login.html")


def logout_view(request):
    logout(request)
    return HttpResponseRedirect(reverse("index"))


def register(request):
    if request.method == "POST": #if they just filled out register form
        username = request.POST["username"]
        email = request.POST["email"]

        # Ensure password matches confirmation
        password = request.POST["password"]
        confirmation = request.POST["confirmation"]
        if password != confirmation:
            return render(request, "auctions/register.html", {
                "message": "Passwords must match."
            })

        # Attempt to create new user
        try:
            user = User.objects.create_user(username, email, password)
            user.save()
        except IntegrityError:
            return render(request, "auctions/register.html", {
                "message": "Username already taken."
            })
        login(request, user) #logs in user 
        return HttpResponseRedirect(reverse("index")) #takes to index
    else:
        return render(request, "auctions/register.html") #if they click register

@login_required
def newListing(request):
    if request.method == "POST": #if they just enetered values for new listing
        title = request.POST["title"]
        description = request.POST["description"]
        bid = request.POST["bid"]
        image = request.POST["photo"]
    
    return render(request, "auctions/new.html") #right when they cllick the button

''' 表单的其余部分似乎正常工作,我对图像使用了相同的格式


Tags: djangodivformreturnifrequesthtmlusername