Ошибка 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`.