Задача: сделать раздел новостей на сайте, который будет разбит на категории. Новость может принадлежать одной категории и ее адрес должен содержать адрес категории.
Для начала работы нам нужно создать модель новостей. Описываем необходимый набор полей для категорий и новостей:
class News(models.Model): title = models.CharField(max_length=250, db_index=True, verbose_name='Название') url = models.SlugField(max_length=250, unique=True, db_index=True, verbose_name='Адрес') category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True, verbose_name='Категория') ... class Category(models.Model): title = models.CharField(max_length=250, db_index=True, verbose_name='Название') category_url = models.SlugField(max_length=250, unique=True, db_index=True, verbose_name='Адрес') text = models.TextField(blank=True, verbose_name='Содержание')
Обратите внимание, что для новостей и категорий имя слагов указано разное.
Далее в файле urls.py записываем следующую схему адресов:
urlpatterns = [ path('', NewsHome.as_view(), name='news_index'), path('<slug:category_url>/', CategoryItem.as_view(), name='news_category'), path('<slug:category_url>/<slug:url>/', NewsItem.as_view(), name='news_item'), ]
Сохраняем, проверяем, работает.