2012-02-06 63 views
3

这可能有点天真的问题,但我一直试图了解如何使用新的Date Based views in django,但没有一个例子,我处于死胡同。我想要做的是在页面上显示我的所有博客条目(分页),并在侧面导航中显示按年份和月份进行的归档。如何在Django中使用基于日期的视图

我想要的是非常基本的,可以在下面附图中看到。

enter image description here

如果有人能提供我一个例子那么这将是真正伟大的。我可以处理模板,但只需要知道如何使用基于类的通用视图。如果通用视图,我真的没有真正使用太多。

回答

8

最简单的例子:

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就可以使用。

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

这个片段经过可用月:

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> 

从这里你应该能够弄清楚如何dev删除您的存档菜单。

相关问题