django DateTimeField список записей по дням - PullRequest
0 голосов
/ 15 июня 2010

Слушай, у меня есть поле в одной из моих моделей, которое сохраняет дату создания объекта

created_on = models.DateTimeField(blank=False, auto_now_add=True)

Это работает как ожидалось.

В моих шаблонах я хочу перечислить объекты, подобные этому

June 15
{{ objects here which was created on June 15 }}
June 14 
{{ objects here which was created on June 14 }}

и т.д.

Есть идеи, как мне поступить?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

Сначала в представлении убедитесь, что ваши объекты упорядочены по полю 'create_on'.

object_list = MyObjs.objects.all().order_by('created_on')

Я полагаю, что тогда вы сможете использовать следующий код в своем шаблоне:

{% regroup object_list by created_on|date:"Y-m-d" as objects_by_day %}

{% for day in objects_by_day %}
    {{day.list.0.created_on|date:"M d"}}
    {% for obj in day.list %}
        {{obj}}
    {% endfor %}
{% endfor %}

Используется шаблонный тег regroup , который группирует элементы по дням и создает список объектов по дням.Сама дата выводится с использованием фильтра шаблона 'date' для переформатирования поля созданного первого элемента в списке этой даты.

[Примечание: я не проверял это!]

1 голос
/ 15 июня 2010

Место для этого находится в шаблоне, а не в представлении.

Вам нужен шаблонный шаблон ifchanged, который вы используете следующим образом:

<h1>Archive for {{ year }}</h1>

{% for entry in entries %}
    {% ifchanged %}<h3>{{ entry.date|date:"F" }}</h3>{% endifchanged %}
    <p>{{ entry.date|date:"j" }} - {{ entry.title }}</p>
{% endfor %}

В этом примере при каждом изменении месяца будет напечатан заголовок с указанием месяца.

ifchanged может делать некоторые относительно сложные вещи (например, проверять, изменились ли все переменные), и может иметь дополнительный блок else - см. документы для получения дополнительной информации.

0 голосов
/ 15 июня 2010

вы можете, например, создать список дат (по дням на заданном интервале) в вашем представлении, упорядоченный от минимального до максимального, и получить все объекты в этом интервале. Затем создайте тег шаблона, который принимает 2 аргумента queryset и дату, и отфильтровать записи, созданные (или что-то еще) к вашей дате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...