Как разобраться с ошибкой 404 в Django, связанной с несуществующими категориями URL?

"Как создать ссылку на страницу каталога писателей и их книг веб-сайта на django с помощью URL-адресов?"
  • 31 января 2024 г. 12:50
Ответы на вопрос 2
Ошибка 404 в Django означает, что запрашиваемая страница не найдена. Это может случиться, если вы пытаетесь создать ссылку на страницу, для которой не определен маршрут URL, или если параметры в URL не соответствуют тем, что ожидаемы вашими представлениями (views).

Чтобы создать ссылку на страницу каталога писателей и их книг, следуйте этим шагам:

1. Определите модели в `models.py`, если вы еще этого не сделали.

```python
# models.py
from django.db import models

class Writer(models.Model):
    name = models.CharField(max_length=100)
    # Другие поля...

class Book(models.Model):
    title = models.CharField(max_length=100)
    writer = models.ForeignKey(Writer, on_delete=models.CASCADE)
    # Другие поля...
```

2. Создайте представления в `views.py`, которые будут обрабатывать запросы к вашим страницам.

```python
# views.py
from django.shortcuts import render, get_object_or_404
from .models import Writer, Book

def writer_list(request):
    writers = Writer.objects.all()
    return render(request, 'writers/writer_list.html', {'writers': writers})

def writer_books(request, writer_id):
    writer = get_object_or_404(Writer, pk=writer_id)
    books = writer.book_set.all()
    return render(request, 'writers/writer_books.html', {'writer': writer, 'books': books})
```

3. Определите маршруты URL в `urls.py`. Убедитесь, что у вас есть конкретные пути для страниц писателей и их книг.

```python
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('writers/', views.writer_list, name='writer_list'),
    path('writers/<int:writer_id>/', views.writer_books, name='writer_books'),
]
```

4. Создайте соответствующие шаблоны HTML для этих представлений: `writer_list.html` и `writer_books.html`.

```html
<!-- writer_list.html -->
{% for writer in writers %}
  <p><a href="{% url 'writer_books' writer.id %}">{{ writer.name }}</a></p>
{% endfor %}
```

```html
<!-- writer_books.html -->
<h2>{{ writer.name }}</h2>
{% for book in books %}
  <p>{{ book.title }}</p>
{% endfor %}
```

5. Теперь все готово для перехода к страницам писателей и их книг. Ссылки на страницы формируются с использованием тега шаблона `{% url 'name' args %}`.

Удостоверьтесь, что в ваших шаблонах вы используете правильные имена URL из вашего файла `urls.py` в функциии `url`.

Если после этих шагов у вас все равно возникает ошибка 404, проверьте следующее:

- Убедитесь, что ваш `urls.py` находится в подключенном приложении и что родительский `urls.py` проекта ссылается на него через `include()`.
- Проверьте, что вы используете правильные шаблоны URL, соответствующие вашим путям в `urls.py`.
- Убедитесь, что ваши представления по этим маршрутам действительно существуют и что они возвращают правильный ответ.
- Проверьте, что URL, который вы пытаетесь открыть, действительно соответствует паттернам, описанным в `urls.py`. Помните, что в этом пути `<int:writer_id>` ожидает целочисленное значение в качестве `writer_id`.
Ну так сделай в category_author_view сначала фильтрацию по categoryWords_slug 
а за подобный except сразу выгоняют на улицу
Похожие вопросы