Данная ошибка возникает потому, что вы пытаетесь извлечь запись из модели не по значению полей pk (id) или slug.
Вот есть у нас urls.py:
Вот есть у нас urls.py:
urlpatterns = patterns('',
# ... какие-то роуты
url(r'^(?P<slug>\w+)/$', PageView.as_view(), name='page_detail'),
)
А вот у нас представление во views.py:
class PageView(DetailView):
template_name = 'page_detail.html'
context_object_name = 'page'
model = Page
Здесь мы указываем модель Page, из которой должна доставаться запись для детального отображения.
Кстати, вот как выглядит модель Page в models.py:
class Page(models.Model):
"""
Страница сайта
"""
title = models.CharField(max_length=50, verbose_name='Заголовок')
slug = models.SlugField(verbose_name='URL страницы', help_text='Например, uslugi', unique=True)
content = models.TextField(verbose_name='Содержание')
def __unicode__(self):
return self.title
class Meta:
verbose_name = 'Страница'
verbose_name_plural = 'Страницы'
Очень важно добавить в модель поле с названием slug, если мы хотим с его помощью получать детальные представления модели.
Теперь мы можем получать контент определенной страницы, обращаясь по адресам:
http://mysite.ru/uslugi (будет загружена страница, имеющая slug = uslugi)
http://mysite.ru/contacts (будет загружена страница, имеющая slug = contacts)
Эти url выглядят понятнее для пользователя, чем:
http://mysite.ru/1
http://mysite.ru/2
Но если вы все-таки хотите, чтобы детальное представление ваших страниц было доступно по этим числовым роутам, просто укажите в urls.py:
urlpatterns = patterns('',
# ... какие-то роуты
url(r'^(?P<pk>\d+)/$', PageView.as_view(), name='page_detail'),
)
В таком случае поле slug в модели Page вам не понадобится, ведь детальные записи будут доставаться по полю pk (primary key).
Комментариев нет:
Отправить комментарий