0

我使用 Django“WeekArchiveView”按周显示我的 Appointment 模型的实例。视图如下所示:

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/week/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_weeknext_week变量由 View 类提供,并指向下一周/上一周的(正确)第一天。

4

1 回答 1

1

视图用于strptime将由适当元素构造的字符串转换为 Python 日期,并且strptime's week 解析使用 0 来表示在工作日的第一个开始之前的日子(星期日或星期一,取决于您使用的是%U还是%W)在给定的年份。要从周字符串中获取 2003 年 1 月 1 日,您必须给出'0'. 所以我认为不会有一个完全简单的方法来做到这一点。

这些未经测试,我不会真正推荐它们,但您可以get_dated_items在视图上自定义您的方法以使用其他东西,而不是strptime构建视图所涵盖的实际日期范围。或者 - 这很丑 - 自定义get_week以检查self.year其第一天是否在周开始日期,如果不是则返回包含捕获的周数减一的字符串。

在这两种情况下,您还必须注意如何生成 URL。目前正在生成/2013/week/0什么?

于 2013-11-08T19:10:58.880 回答