Как выстроить иерархию новостей в Django

Хлебные крошки в Django
Обзор обновления aveCRM 7.6
Как выстроить иерархию новостей в Django

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

Для начала работы нам нужно создать модель новостей. Описываем необходимый набор полей для категорий и новостей:

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'),
]
	 

Сохраняем, проверяем, работает.

Вы готовы начать работу или получить консультацию?

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