我如何制作一个页面,该页面将始终显示我的Django模型的最新帖子

时间:2019-06-30 02:47:29

标签: python django

感谢所有提前看过此书的人!我真的很感激。

我建立了一个非常简单的模型,该模型包含两个参数(标题,即发布日期和文本,仅此而已):

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():

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

我也曾尝试在views.py中的类下创建def函数,但是错误是由于某种原因,URL无法导入它。

无论如何,我可能都在想着它,只是愚蠢。如果有人可以帮助我,我将非常感谢!在此先感谢一吨,并为很长的问题感到抱歉!

最好, 拉苏尔·基列耶夫(Rasul Kireev)

1 个答案:

答案 0 :(得分:0)

这属于视图。而不是URL。

您需要定义get_object

class NowLatestView(DetailView):
    model = Post
    template_name = 'then.html'

    def get_object(self)
        return Post.objects.order_by('title').first()