Обратный для ‘plane_detail_book’ с аргументами ключевого слова ‘{‘pk’: 2}’ не найден 1 шаблон (ы) попробовал: [‘/$’]

#django #python-2.7 #django-forms #django-templates #django-views

#django #python-2.7 #django-forms #django-templates #django-просмотры

Вопрос:

Я пытаюсь выполнить поиск авиакомпаний из определенного источника в пункт назначения, и после перечисления самолетов я хочу, чтобы самолеты были ссылками, чтобы нажатие на них приводило меня на страницу сведений о самолете, но по какой-то причине эта ошибка продолжает появляться. Я новичок в этом, поэтому, похоже, не могу разобраться в проблеме. Любая помощь будет оценена.

views.py

 def index(request):
    form = SearchForm()

    if request.method == "POST":
        form = SearchForm(request.POST)

        if form.is_valid():
            return plane_list(request)
        else:
            print("ERROR")

    return render(request,'index.html',{'form':form})

def plane_list(request):

    form = SearchForm(request.POST or None)

    if request.method == "POST":
        form = SearchForm(request.POST)
        if form.is_valid():

            p = Route.objects.filter(route_dest = form.cleaned_data.get('destination'),route_src = form.cleaned_data.get('source'))
            if not p:
                route_id = 1000
            else:
                route_id = p[0].route_no
            flights = FlightDetail.objects.filter(route=route_id)

    return render(request, 'plane_list.html', {'form': form,'flights': flights})

def plane_detail_book(request):
    flights = FlightDetail.objects.all()
    return render(request, 'flightdetail.html',{'flights': flights})
  

models.py

 class Route(models.Model):
    route_no = models.CharField(max_length = 10)
    route_dest = models.CharField(max_length = 100)
    route_src = models.CharField(max_length = 100)

class FlightDetail(models.Model):
    flight_no = models.CharField(max_length = 100,)
    route = models.CharField(max_length = 100)

    def get_absolute_url(self):
        return reverse("flight_detail_book",kwargs={'pk': self.pk})
  

urls.py

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index,name='index'),
    path('planes/',views.plane_list,name='plane_list'),
    path('<int: pk>/',views.plane_detail_book,name='plane_detail_book'),
]
  

шаблон

 <body>
    {% if flights %}
      {% for flights in flights %}
        <div class="container">     
          <a href="{% url 'plane_detail_book' pk=flights.pk %}">{{ flights.flight_no }}</a>
          </div>
      {% endfor %}
    {% else %}
      <h1>NO PLANES</h1>
    {% endif %}
  </body>
</html>
  

Комментарии:

1. Я думаю, вам нужно получить конкретный FlightDetail объект, который вы выбираете из списка в вашем подробном представлении

Ответ №1:

измените представление с этого

 def plane_detail_book(request):
    flights = FlightDetail.objects.all()
    return render(request, 'flightdetail.html',{'flights': flights})
  

Для

 def plane_detail_book(request,pk):
    flights = FlightDetail.objects.all()
    return render(request, 'flightdetail.html',{'flights': flights})
  

также измените абсолютный URL в вашей модели

 def get_absolute_url(self):
        return reverse("plane_detail_book",kwargs={'pk': self.pk})
  

обновите html

 <body>
    {% if flights %}
      {% for flight in flights %}
        <div class="container">     
          <a href="{% url 'plane_detail_book' flight.pk %}">{{ flight.flight_no }}</a>
          </div>
      {% endfor %}
    {% else %}
      <h1>NO PLANES</h1>
    {% endif %}
  </body>
</html>
  

уберите пробел

 path('<int:pk>/',views.plane_detail_book,name='plane_detail_book'),
  

Комментарии:

1. Я попробовал это. Но это не устраняет ошибку. По-прежнему появляется то же сообщение об ошибке.

2. ОК. Это была большая ошибка. Я исправил это. Спасибо. Но ошибка все еще сохраняется.

3. Это был пробел. Тьфу! Спасибо, высоко ценится.

Ответ №2:

Я думаю, вам нужно изменить представление деталей:

 def plane_detail_book(request):
    flights = FlightDetail.objects.all()
    return render(request, 'flightdetail.html',{'flights': flights})
  

Для

 from django.shortcuts import get_object_or_404

def plane_detail_book(request,pk):
    flights = get_object_or_404(FlightDetail, pk=pk)
    return render(request, 'flightdetail.html',{'flights': flights})