为什么我会收到 NoReverseMatch 错误,我该如何解决?

问题描述 投票:0回答:1

这是我的代码:

views.py

def book(request, flight_id):
    try:
        passenger_id = int(request.POST["passenger"])
        passenger = Passengers.objects.get(pk=passenger_id)
        flight = Flights.objects.get(pk=flight_id)
    except KeyError:
        return render(request, 'flights/error.html', {'message':'No Selection'})
    except Flights.DoesNotExist:
        return render(request, 'flights/error.html', {'message':'No Flight'})
    except Passengers.DoesNotExist:
        return render(request, 'flights/error.html', {'message': 'No Passengers'})

    passenger.flights.add(flight)
    return HttpResponseRedirect(reverse('flight', args=(flight_id,)))

模板

<h2>Add a Passenger</h2>
{% if non_passengers %}
<form action="{% url 'book' flight.id %}" method="post">
    <select name="passenger">
    {% for passenger in non_passengers %}
    <option value="passenger.id">{{ passenger }}</option>
    {% endfor %}
    </select>
    <input type="submit" value="Book Flight"/>

</form>
{% else %}
   <div>No Passengers to add</div>
{% endif %}

urls.py

   path('', views.index, name='index'),
   path('<int:flight_id>', views.flight, name='flight'),
   path('<int:flight_id>/book', views.book, name='book')

它向我显示这样的错误:

NoReverseMatch 在 /1 找不到带有参数“(”,)“的“书”。尝试了 1 种模式:['(?P[0-9]+)/book$']

django django-urls
1个回答
0
投票

我遇到了同样的问题。我纠正了这个问题,我所做的是,在 url.py 中添加了 app_name = "flights" 并将其添加到 views.py 'flights:flight'

return HttpResponseRedirect(reverse('flights:flight', args=(flight_id,)))

还有 flight.html 应该是这样的。 (添加航班:预订以形成行动)

<form action="{% url 'flights:book' flight.id %}" method="post">
© www.soinside.com 2019 - 2024. All rights reserved.