Получение неправильного заголовка в пути URL Django
Я немного новичок в django, так что потерпите меня
У меня есть приложение с кучей POST-запросов по пути, который выглядит следующим образом:
path("auctions/<str:title>", views.listing, name="listing")
это своего рода аукционное приложение, где пользователи могут создавать объявления, а другие могут делать ставки и покупать эти предметы.
Когда пользователь нажимает на один из этих пунктов, у меня есть функция, которая переводит его на страницу, где он может получить все подробности об объявлении, на которое он только что нажал, и он может сделать такие вещи, как сделать ставку или поместить пункт в свой список наблюдения
views.py
def listing(request, title):
if request.method == "POST":
if watchlist.is_valid():
if "watchlist" in request.POST:
watchlist_data = Watchlists.objects.all().filter(title=title, user=username).first()
if watchlist_data:
watchlist_data.delete()
else:
true_wtchlist = Watchlists.objects.create(title=title, user=username)
ps: watchlist здесь просто пример одного из условий моей функции, я просто разместил его как пример, хотя я буду признателен за указание любых ошибок, если таковые будут замечены
Обычно я могу получить title
название объявления, которое было нажато, из аргумента title
, который передается сюда def listing(request, title):
, и я использую это название для запроса к базе данных.
Теперь я пытаюсь добавить кнопку "Закрыть объявление" на страницу, чтобы пользователь, разместивший объявление, мог закрыть его после того, как товар будет продан самому высокому покупателю, и вот что у меня получилось:
шаблон
{% if user.username == users %}
<form action="listing" method="POST">
{% csrf_token %}
<input class="btn btn-primary" type="submit" value="Close Listing" name="close">
</form>
{% endif %}
views.py
if "close" in request.POST:
bid = Bid.objects.all().filter(title=title, price=max_bid).first()
max_bid_user = bid.user
listing_object.tag = 'closed'
listing_object.save()
if username == max_bid_user:
return render(request, "auctions/listing.html", {
"message": "Thank you for your entry into this auction. You have emerged the winner and this listing has been closed"
})
Я получал кучу ошибок, поэтому я попытался отладить и заметил, что он получает неправильный заголовок из пути
request:<WSGIRequest: POST '/auctions/listing'>
и у меня путь и информация о пути выглядят так:
path: '/auctions/listing'
path_info: 'auctions/listing'
и так же выглядит название:
title: 'listing'
NB: 'listing' - это имя пути
Может кто-нибудь объяснить мне, что здесь происходит и почему?
кто-то сказал, чтобы поделиться просмотром всего листинга:
Теперь, когда мне пришлось выложить все это, я вижу, насколько это грязно, любые исправления приветствуются
Вы должны использовать теги url в action
вместо action='listing'
так:
<form action="{% url 'listing' listing_object.title %}" method="POST">
{% csrf_token %}
<input class="btn btn-primary" type="submit" value="Close Listing" name="close">
</form>
Примечание: Всегда добавляйте
./
в конце каждого маршрута, поэтому в urls.py это должно бытьpath("auctions/<str:title>/"....)