#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})