2013-11-08 4 views
0

Я использую Django «WeekArchiveView» для отображения экземпляров моей модели Appointment по неделям. The View выглядит следующим образом:Django WeekArchiveView: начинаются ссылки на 1

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-адреса фактически соответствуют номеру недели. Я попытался реализации следующей/предыдущей неделе ссылки, как следующее:

{% 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 и указывают на (правильный) первый день следующей/предыдущей недели.

ответ

1

Представления используют strptime для преобразования строки, построенной из соответствующих элементов, в дату Python, а сеанс недели strptime использует 0 для представления дней, которые выпадают до первого начала рабочего дня (воскресенье или понедельник в зависимости от того, будет ли вы используете %U или %W) в данном году. Чтобы получить 1 января 2003 года из недельной строки, вы должны дать ей '0'. Поэтому я не думаю, что это будет абсолютно простой способ сделать это.

Это не проверено, и я бы не рекомендовал их, но вы можете настроить свой метод get_dated_items на свой взгляд, чтобы использовать что-то отличное от strptime, чтобы построить фактические диапазоны дат, которые должны быть охвачены представлением. Или - и это довольно уродливо - настройте get_week, чтобы проверить self.year, чтобы узнать, падает ли его первый день на дату начала недели, и если не вернуть строку, содержащую номер недели недели минус один.

В обоих случаях вам также необходимо обратить внимание на то, как вы создаете свои URL-адреса. Что в настоящее время производит /2013/week/0?

+0

Что вы подразумеваете под тем, что генерирует/2013/неделя/0? неделя/0 возвращает правильный вид на первую неделю 2013 года, начиная с 31 декабря 2012 года, что является правильным. – feob

+0

Я имею в виду, что где-то вы должны генерировать URL-адреса, чтобы указать на ваш просмотр. Обычно с '{% url ...%}' или 'reverse'. –

+0

На данный момент у меня есть только привязка к определенной неделе. Позже он всегда должен указывать на текущую неделю. Я попытался реализовать следующую/предыдущую неделю в представлении. Я соответствующим образом обновил этот вопрос. – feob

Смежные вопросы