Чтобы закончить работу с приложением списков, мы создадим страницу, на которой пользователи смогут удалять свои списки.

Удалить URL-адрес листинга

Откройте urls.py и добавьте путь на страницу удаления списка.

#listings/urls.py 
from django.urls import path
from .import views
                    
app_name = 'listings' 
                    
urlpatterns = [
  path(' ', views.index, name='index'),
  path('all_listings/', views.all_listings, name='all_listings'),
  path('new_listing/', views.new_listing, name='new_listing'),
  path('all_listings/<detail_id>/', views.detail, name='detail'),
  path('my_listings/', views.my_listings, name='my_listings'),
  path('edit_listing/<edit_id>/', views.edit_listing, name='edit_listing'),
  path('delete_listing/<delete_id>/', views.delete_listing, name='delete_listing'),
]

Удалить просмотр списка

Откройте views.py и создайте представление для страницы удаления списка.

#listings/views.py
from django.shortcuts import render, redirect 
from .forms import ListingForm
from .models import Listings
...
def delete_listing(request, delete_id): 
    listing = Listings.objects.get(id=delete_id)
    if request.method == 'POST':
        listing.delete()
        return redirect('listings:my_listings') 
    context = {'listing': listing}
    return render(request, 'listings/delete_listing.html', context)

Мы даем пользователям возможность выбирать, хотят они удалить листинг или нет. Пользователям нужно будет сделать запрос POST, чтобы удалить листинг.

Удалить шаблон листинга

Создайте шаблон с именем delete_listing.html в папке шаблонов и добавьте следующий код.

PROJECT
└── example
├── listings
│ ├── migrations
│ ├── templates/listings
│ │ ├── index.html
│ │ ├── all_listings.html
│ │ ├── new_listing.html
│ │ ├── detail.html
│ │ ├── my_listings.html
│ │ ├── edit_listing.html
│ │ └── delete_listing.html
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── venv 
└── manage.py

Удалить файл шаблона листинга

#listings/templates/listings/delete_listing.html
{% extends "listings/base.html" %}
{% block content %}
                            
<div class="main">
  <form method="POST">
      <div class="container">
      {% csrf_token %}
      <h3>Do you want to delete <b>{{listing.title}}</b> listing ?</h3>
      <p>
        <input type="submit" class="btn" value="Delete" />
        <a class= "btn" 
        href="{% url 'listings:my_listings'%}">Cancel
        </a>
      </p>
      </div>
  </form>
</div>
{% endblock content %}

Мы отображаем сообщение, которое предложит пользователям выбрать один из двух вариантов. Если пользователи нажмут «Удалить», список будет удален. С другой стороны, «Отмена» перенаправляет пользователей на страницу с моими объявлениями.

Мои объявления — Удалить

Откройте my_listings.html и активируйте кнопку удаления.

#listings/templates/listings/my_listings.html
{% extends "listings/base.html" %}
{% block content %}
                  
<h2>MY LISTINGS:</h2>
<div class="row">
  <div class="col">
    <div class="card">
      <table class="table">
        <tr>
          <th>Product</th>
          <th>Date Listed</th>
          <th></th>
          <th></th>
          <th></th>
        </tr>
        {% for my_listing in my_listings %}
        <tr>
          <td>{{ my_listing.title }}</td>
          <td>{{ my_listing.list_date }}</td>
          <td><a class="btn" 
            href="{% url 'listings:detail' my_listing.id %}">View
          </a></td>
          <td><a class="btn" 
            href="{% url 'listings:edit_listing' my_listing.id %}">Edit
          </a></td>
          <td><a class="btn" 
            href="{% url 'listings:delete_listing' my_listing.id %}">Delete
          </a></td>
        </tr>
        {% endfor %}
      </table>
        <div class="container">
          <a class="btn" 
            href="{% url 'listings:new_listing'%}">New Listing
          </a>
        </div>
    </div>
  </div>
</div>     
{% endblock content %}

Сохраните изменения и введите команду python manage.py runserver.

Перейдите на страницу моих объявлений и попробуйте удалить объявление.

Вы должны увидеть сообщение с предложением выбрать, хотите ли вы удалить листинг или нет.

Когда вы удаляете объявление, оно исчезает как со страницы объявлений, так и со страницы моих объявлений.

Функция удаления дополняет все основные функции приложения списков. Тем не менее, всегда есть возможности для улучшения, поэтому не стесняйтесь добавлять в приложение дополнительные функции, если хотите.

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

Если вам нравится сериал, следите за мной в Twitter и на Youtube, чтобы узнать больше.

Youtube: Брайам Лоайза

Твиттер: balt1794