我正在使用 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'
该 View 工作正常 - 它正确返回 URL 中指定年份的所有评论,不显示 future 的评论,只显示已发布的评论。
在渲染页面的顶部,我希望有一个包含评论的所有年份的列表,以便用户可以轻松地移动到不同年份的评论。 YearArchiveView
自动向模板提供 next_year
和 previous_year
上下文变量,但我找不到任何可用年份的列表。 date_list
看起来很有希望,但只返回所选年份内月份的列表。
有没有办法获取 View 可以显示的所有年份的列表,以便为 View 提供页面之间的导航?
最佳答案
是的 - 日期
查询集可以做到这一点:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#dates
看起来通用 View 中的任何内容都没有运行此类查询,因此您可能需要将其放入 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
设置 - 如果您基于实时发布日期,这可能不是什么大问题。
关于python - Django YearArchiveView 可以返回所有可能年份的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714778/