我使用Django“WeekArchiveView”按周显示我的约会模型的实例。 视图如下所示:
class AppointmentWeekArchiveView(WeekArchiveView):
queryset = Appointment.objects.all().order_by('start_date')
date_field = "start_date"
make_object_list = True
allow_future = True
allow_empty = True
week_format = '%W'
我将week_format设置为周一开始周。 urls.py中的相应条目如下所示:
url(r'^(?P<year>\d{4})/week/(?P<week>\d+)$',
views.AppointmentWeekArchiveView.as_view(),
name="appointment_week")
除一个问题外,一切运作良好:一年的第一周位于/ 2013 /周/ 0,在这种情况下我觉得很困惑。
有没有办法让它们从1开始,这样我就可以保持一周的url和输出之间的一致性,例如: {{ week | date:'W' }}
?
我没有在文档中找到有关此行为的任何提示。
我刚才意识到,在其他年份(例如2012年),网址实际上与周数匹配。我尝试实现下一个/上周的链接,如下所示:
{% url 'appointments:appointment_week' previous_week|date:'Y' previous_week|date:'W' %}
和
{% url 'appointments:appointment_week' next_week|date:'Y' next_week|date:'W' %}
这些也在2013年失败,但是对于例如2012。
previous_week
和next_week
变量由View类提供,并指向下一个/上周的第一天(正确)。
答案 0 :(得分:1)
视图使用strptime
将从适当元素构造的字符串转换为Python日期,strptime
周解析使用0表示在第一周开始之前的日期(周日或周一,取决于您是否在特定年份使用%U
或%W
)。要从一周字符串获取2003年1月1日,您必须给它'0'
。所以我认为没有一种完全简单的方法可以做到这一点。
这些是未经测试的,我不会真的推荐它们,但您可以在视图上自定义get_dated_items
方法,以使用strptime
之外的其他方法来构建实际的日期范围被观点所覆盖。或 - 这非常难看 - 自定义get_week
以检查self.year
以查看其第一天是否属于周开始日期,如果不是,则返回包含捕获的周数减去1的字符串。
在这两种情况下,您都必须注意如何生成网址。目前正在生成什么/2013/week/0
?