Получение неправильного заголовка в пути 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>/"....)

.
Вернуться на верх