【问题标题】:How to use date based views in Django如何在 Django 中使用基于日期的视图
【发布时间】:2012-02-27 16:14:13
【问题描述】:

这可能是一个有点幼稚的问题,但我一直在尝试了解如何使用新的Date Based views in django,但没有示例,我就走投无路了。我想要做的是在一个页面上显示我所有的博客条目(带有分页),在侧面导航中我想显示根据年份和月份完成的归档。

我想要的很基本,可以看下图。

如果有人可以给我一个例子,那就太好了。我可以处理模板,但只需要知道如何使用基于类的通用视图。如果是通用视图,我并没有真正使用太多。

【问题讨论】:

    标签: django django-generic-views


    【解决方案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 格式为Ymonth 格式为b(小写的短月份名称)。

    示例调用articles/monthly/?year=2012&month=feb

    这是您可以使用的示例archive_templates/monthly.html

    我正在使用来自优秀 twitter bootstrap 框架的 css 类。强烈推荐!

    这个 sn-p 经历了可用的月份:

        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 %}
    

    这个sn-p做分页:

    {% 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>
    

    从这里您应该能够弄清楚如何开发您的存档菜单。

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 2012-01-28
      • 2012-06-09
      • 2011-08-06
      • 2013-04-02
      • 2010-10-14
      • 2011-09-09
      • 1970-01-01
      • 2019-08-29
      相关资源
      最近更新 更多