我正在使用YearArchiveView
自己创建的应用程序在页面上显示每年的所有评论:
class year_reviews(YearArchiveView):
queryset = SimpleReview.objects.published()
date_field = "date_published"
make_object_list = True
allow_future = False
template_name = 'reviews.html'
context_object_name = 'reviews'
该视图运行良好-正确返回URL中指定年份的所有评论,不显示将来的评论,而仅显示已发布的评论。
在呈现页面的顶部,我想要列出所有年份的评论,以便用户可以轻松地移至其他年份的评论。YearArchiveView
自动提供next_year
与previous_year
上下文变量的模板,但我无法找到任何形式的所有可用多年的名单。date_list
看起来前途无量,但只返回一个列表个月的选择一年内。
有什么方法可以获取视图可以显示的所有年份的列表,以便在视图的页面之间提供导航?
是的-查询集dates
可以做到这一点:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#dates
通用视图中似乎没有任何东西已经在运行这样的查询,因此您可能希望将其放入get_context_data
方法中。
您会想要这样的东西:
class YearReviews(YearArchiveView):
def get_context_data(self, **kwargs):
context = super(YearReviews, self).get_context_data(**kwargs)
context['years_available'] = self.queryset.dates(self.date_field, 'year')
return context
这会将datetime.date
对象的查询集放到您的上下文中,代表每个有效年度的1月1日。如果愿意,可以在get_context_data
方法中将它们转换为年份字符串,或|date
在模板中使用过滤器。它会忽略您的allow_future
设置-如果您将发布日期设为实时,这可能并不重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句