我一直在尝试将我的博客帖子视图从单个自定义模板/视图/网址设置重构为一组希望更好的通用日期视图。但是这不能按计划运行,因为我的新视图没有拾取对象。我尽可能彻底地阅读了Generic date views page,但我无法正常工作。
这是我的Urls.py:
"""Creativeflow URL Configuration the blog app."""
from django.conf.urls import url
from django.views.generic.dates import ArchiveIndexView, YearArchiveView
from .models import Post
from .views import BlogDetailView
urlpatterns = [
url(r'^posts\/(?P<year>\d{4})\/(?P<month>\d{2})\/(?P<day>\d{2})\/(?P<slug>\w+)',
BlogDetailView.as_view(), name="blog-detail"),
url(r'^posts/?$',
ArchiveIndexView.as_view(model=Post, date_field="published"), name="blog-archive-list"),
url(r'posts/(?P<year>\d{4})',
YearArchiveView.as_view(model=Post, date_field="published"), name="post_year_archive")
]
我只实现了两个通用视图,但我打算实现所有这些视图。
我没有任何自定义视图,因为我依赖于泛型类。
我的模板:
{% extends "base.html" %}
{% block content %}
<main class="flexy">
<div class="sidebar-wrapper col-md-2 col-xs-12">
<h3>Posts by Date</h3>
<ul class="sidebar-nav dates">
{%for dates in view.post_dates%}
<li class = "sidebar-item dropdown">
<a href="/posts/{{dates.year}}" class="dropdown-toggle" id="dropdownMenu{{dates.year}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">{{dates.year}}</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu{{dates.year}}">
{% for month in dates.months %}
<li>
<a href="/posts/{{dates.year}}/{{month.num}}">{{month.name}}</a>
</li>
{% endfor %}
</ul>
</li>
{%endfor%}
</ul>
<h3>Social Media Links</h3>
<ul class="sidebar-nav social">
{% for site in view.get_social_media_sites %}
<li class = "sidebar-item">
<a href="{{site.url}}">{{site.name}}</a>
</li>
{% endfor %}
</ul>
</div>
<div class="blog-wrapper">
<div class="page-header">
<p> Blog List - posts earlier than {{view.query_date}}</p>
</div>
{% block list %}
{% endblock %}
</div>
</main>
{% endblock content %}
存档页面:
{% extends "blog/post_lists.html" %}
{% block post_list %}
{% for blog in latest %}
<div class="blog-card panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{{blog.title}} - {{blog.published}}</h3>
</div>
<div class="panel-body">
<p>{{blog.body|linebreaks}}<p>
</div>
<div class="panel-footer">
<footer>Written by {{blog.author}}</footer>
</div>
</div>
{% empty %}
<p>Nothing to see</p>
{% endfor %}
{% endblock post_list %}
我很困惑,因为如果latest
中没有对象,那么empty
块会被触发,但我没有任何意义在控制台中出现并且没有错误。
我错过了什么?是否有更简单的方法可以使所有通用日期视图(year
,month
等)可用?