Как в Django на главной странице вывести одну запись из БД?

В руководствах по фреймворку Django везде описывается как выводить список записей из базы данных, но нигде не нашёл информации как вывести на главной странице сайта одну определённую запись.

Пробовал разобраться сам и на основе имеющихся в сети примеров получить необходимый результат, но не получилось - не хватает навыков. Так что буду признателен за советы в каком направлении копать.
Есть приложение basicapp с основными страницами сайта, в нём есть модель MainPages:

models.py
class MainPages(models.Model):
    name = models.CharField(verbose_name="Название страницы", max_length=100)
    title = models.CharField(blank=True, max_length=100)
    description = models.CharField(blank=True, max_length=300)
    keywords = models.CharField(blank=True, max_length=300)
    h1 = models.CharField(verbose_name="Заголовок h1", blank=True, max_length=100)
    content = models.TextField(verbose_name="Контент", blank=True, max_length=5000)


views.py
class MainPagesDetailView(generic.DetailView):
    model = MainPages
    template_name = 'basicapp/index.html'
    context_oject_name = 'mainpages'


urls.py
urlpatterns = [
    path('', views.MainPagesDetailView.as_view(), name='index'),
]


При открытии главной страницы получаем ошибку:
Generic detail view MainPagesDetailView must be called with either an object pk or a slug in the URLconf.

Понимаю, что для отображения определённой записи из БД я должен указать Django какую именно запись нужно получить, но как это сделать не могу разобраться.
  • Вопрос задан
  • 1624 просмотра
Решения вопроса 1
WStanley
@WStanley
Back-end Developer
Трям!
DetailView - выводит на страницу 1 запись, да. Но для вывода она просит передать ей pk этой записи (primary key который id обычно) или slug(его у тебя нет в таблице), о чем и говорит твоя ошибка - MainPagesDetailView must be called with either an object pk or a slug in the URLcon

urlpatterns = [
    path('<int:id>/', views.MainPagesDetailView.as_view(), name='index'),
    # или
    path('<slug:slug>/', views.MainPagesDetailView.as_view(), name='index'),
]

Соответственно обратиться на страницу придется по ключу
http://my_domain/pk/ 
или
http://my_domain/slug/

Почитай доку
https://docs.djangoproject.com/en/3.1/ref/class-ba...
ПС: id в таблице у тебя есть

Если же ты хочешь вывести на главной странице запись по обращению к домену без ключа, то используй например TemplateView
https://docs.djangoproject.com/en/3.1/ref/class-ba...
в get_context_data передай в шаблон любые данные кот нужны и обращайся к ним в шаблоне
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы