Как использовать представления на основе даты в Django

Это может быть немного наивный вопрос, но я пытался понять, как я могу использовать новый Представления на основе даты в django, но без примера я в тупике. Что я хочу сделать, так это показать все мои записи в блоге на странице (с разбиением на страницы), а в боковой навигации я хочу показать архивирование, выполненное в соответствии с годом и месяцем.

То, что я хочу, очень просто, и это можно увидеть на картинке, прикрепленной ниже.

введите здесь описание изображения

Если кто-то может привести мне пример, это было бы действительно здорово. Я могу обрабатывать шаблоны, но мне просто нужно знать, как использовать общие представления на основе классов. Я действительно не использовал много общих представлений.


person Sachin    schedule 06.02.2012    source источник


Ответы (1)


Самый простой пример:

views.py

from django.views.generic.dates import MonthArchiveView
from myapp.models import Article

urlpatterns = patterns('',
    url(r'^articles/monthly/$',MonthArchiveView.as_view(
        model=Article,
        paginate_by=12,
        date_field='publish_date',
        template_name='archive_templates/monthly.html', 
    ),name="monthly"),
)

Вам нужно вызвать представление с правильным днем ​​и месяцем, иначе вы получите исключение. Аргументы по умолчанию: year в формате Y и month в формате b (сокращенное название месяца в нижнем регистре).

Пример вызова articles/monthly/?year=2012&month=feb

Вот образец archive_templates/monthly.html, который вы можете использовать.

Я использую классы CSS из отличной среды twitter bootstrap. Настоятельно рекомендуется!

Этот фрагмент показывает доступные месяцы:

    Archive for {{ month|date:"F" }} {{ month.year }}<br />
    <div class="pagination pull-left">
        <ul>
            {% if previous_month %}
                <li class="prev">
                    <a href="{% url monthly %}?year={{ previous_month|date:"Y"  }}&month={{ previous_month|date:"b" }}">
                        &larr; {{ previous_month|date:"M Y" }}
                    </a>
                </li>
            {% endif %}
            {% if next_month %}
                <li class="next">
                    <a href="{% url monthly %}?year={{ next_month|date:"Y"  }}&month={{ next_month|date:"b" }}">
                        {{ next_month|date:"M Y" }} &rarr;</a>
                </li>
            {% endif %}
        </ul>
    </div>
{% endif %}

Этот фрагмент выполняет разбиение на страницы:

{% if is_paginated %}
    <div class="pagination pull-right">
        <ul>
            <li class="{% if page_obj.has_previous %}prev {% else %} prev disabled {% endif %}">
                <a href="{% if page_obj.has_previous %}?page={{ page_obj.previous_page_number }}&year={{ month|date:"Y" }}&month={{ month|date:"b" }}{% else %}#{% endif %}">&larr;</a></li>
            <li class="disabled"><a href="#"><strong>{{ page_obj.number }} of {{ paginator.num_pages }}</strong></a></li>

            <li class="{% if page_obj.has_next %}next{% else %} next disabled {% endif %}">
                <a href="{% if page_obj.has_next %}?page={{ page_obj.next_page_number }}&year={{ month|date:"Y" }}&month={{ month|date:"b" }}{% else %}#{% endif %}">&rarr;</a>
            </li>

        </ul>
    </div>
{% endif %}

Фактический список объектов очень просто перебрать:

<table class="zebra-striped" width="100%">
    <thead>
    <tr>
        <th>#</th>
        <th>Title</th>
        <th>Author</th>
        <th>Published On</th>
    </tr>
    </thead>
    <tbody>
    {% for obj in object_list %}
        <tr>
            <th>{{ forloop.counter }}</th>
            <td>{{ obj.title }}</td>
            <td>{{ obj.author }}</td>
            <td>{{ obj.publish_date|date:"d/m/Y" }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

Отсюда вы сможете понять, как разработать меню архива.

person Burhan Khalid    schedule 06.02.2012