Спасибо всем людям, которые смотрели на это заранее! Я действительно ценю это.
Я настроил очень простую модель, состоящую из двух параметров (заголовок, дата публикации и текст):
models.py
class Post(models.Model):
title = models.DateField(blank=True, null=True)
body = models.TextField()
def __str__(self):
return str(self.title)
После выполнения стандартного «создания блога в учебнике по Django» я создал два представления, которые показывают список всего опубликованного и представление, которое отображает детали любого выбранного сообщения.
views.py
class NowListView(ListView):
model = Post
template_name = 'archive.html'
class NowDetailView(DetailView):
model = Post
template_name = 'then.html'
Наконец, у меня есть этот urls.py, который успешно показывает все сообщения на http://127.0.0.1:8000/now/archive и конкретный пост на http://127.0.0.1:8000/now/archive/1 (или любое другое число, в зависимости от pk ).
urls.py
urlpatterns = [
path('archive', NowListView.as_view(), name='archive'),
path('archive/<int:pk>', NowDetailView.as_view(), name='then'),
]
Чего я хочу добиться, так это отображать последнее сообщение на http://127.0.0.1:8000/now.
Я испробовал миллион способов сделать это, но ничего не получалось, всегда что-то мешало (потребовалось бы слишком много времени, чтобы написать их все). После всех этих попыток для меня очевидно, что я должен использовать запрос, чтобы получить последний пост, но у меня нет рабочего способа сделать это.
Я пытался использовать этот Post.objects.earliest ('title') и этот Post.objects.order_by ('title'). First () в моих URL как таковых:
urls.py
urlpatterns = [
path('archive', NowListView.as_view(), name='archive'),
path('archive/<int:pk>', NowDetailView.as_view(), name='then'),
path('>',NowDetailView.as_view(Post.objects.order_by('title').first()), name='then'),
]
Это дает мне ошибку:
TypeError: as_view() takes 1 positional argument but 2 were given
Я также пытался создать функцию def под моим классом в views.py, но ошибка тогда заключалась в том, что URL-адреса не могли импортировать ее по какой-то причине.
В любом случае, я, наверное, слишком обдумываю это и просто глупо. Если бы кто-нибудь мог помочь мне с этим, я был бы очень благодарен! Заранее большое спасибо и простите за длинный вопрос!
Лучший,
Расул Киреев