Как взять id из формы django model, использовать его в качестве url и получить все данные из этого значения из формы?
Я делаю проект CS50 Project 2 и мне нужно сделать веб-страницу, которая принимает id через url и извлекает всю информацию об этом конкретном предмете из базы данных для отображения на веб-странице.
def listing(request, id):
id = Listings.objects.get(id=2)
return render(request, "auctions/listing.html",{
"listings": Listings.objects.all()
})
Вот мой текущий код. Я пытаюсь получить id, который находится в параметре url, через переменную, и я хочу, чтобы переменная listings получала только объекты для этого элемента, но я не совсем уверен, как это сделать.
Дайте мне знать, если вам понадобится еще какой-либо код. Большое спасибо за помощь!
Я делаю много предположений, поэтому прошу прощения, но я думаю, что ошибка page not found и ваш первоначальный вопрос связаны, и я думаю, что все сводится к созданию двух разных представлений, двух разных путей url и двух разных шаблонов. Один вид/путь/шаблон для всех объявленийс (множественное число), и другой вид/путь/шаблон для отдельных объявлений (единственное число).
Сначала ссылки, которые вам понадобятся:
path("listings/", views.listings, name = "listings"),
path("listing/<int:id>/", views.listing, name = "listing"),
То, что у вас уже есть, похоже, что оно будет принадлежать представлению listings view/path/template, с некоторыми изменениями. Представление listings не будет иметь id, так как оно будет отображать all объявления (обратите внимание, что я изменил все это на listings в отличие от listing, чтобы не путать это с представлением, которое будет заботиться о единичном объявлении конкретного элемента листинга:
).def listings(request):
return render(request, "auctions/listings.html",{
"listings": Listings.objects.all()
})
Это представление может использоваться в шаблоне listings (обратите внимание, что я изменил название с listing.html на listings.html, поскольку listing.html будет заниматься конкретным объявлением, а listings.html - всеми объявлениями). Также обратите внимание на часть <a href="{% url 'listing' listing.id %}">, которая является магической частью, где будет создан url с id конкретного объявления (обратите внимание, что name представления идет после слова url, и что id not имеет кавычки - это будет параметр, добавляемый в сгенерированный url):
{% extends "auctions/layout.html" %}
{% block body %}
{{% for listing in listings %}
<img src ="{{ listing.image }}" style = "height: 10%; width: 10%;">
<h4 class = "text">{{ listing.title }}</h4>
<h6>Description: {{ listing.description }}</h6>
<h6>Category: {{ listing.category }}</h6>
<h6>Price: ${{ listing.bid }}</h6>
<a href="{% url 'listing' listing.id %}">link to this particular listing's page</a>
{% endfor %}
{% endblock %}
Теперь перейдите на страницу детализации конкретного объявления, куда приведет пользователя сгенерированная выше ссылка.
def listing(request, id):
listing = Listings.objects.get(id=id)
return render(request, "auctions/listing.html",{
"listing": listing
})
Далее необходимо создать шаблон под названием listing.html, в котором можно показать все детали конкретного объявления.
CS50 Web Programming - фантастический, и очень сложный. Мне очень помогло чтение notes, а также остановка video и написание кода, который он демонстрирует. Все ответы находятся там. Просто совет; все учатся по-разному. Удачи!