为什么我的Django GenericDateViews显示我的博客文章?

时间:2016-07-17 22:41:48

标签: python django django-class-based-views django-generic-views

我一直在尝试将我的博客帖子视图从单个自定义模板/视图/网址设置重构为一组希望更好的通用日期视图。但是这不能按计划运行,因为我的新视图没有拾取对象。我尽可能彻底地阅读了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")
]

我只实现了两个通用视图,但我打算实现所有这些视图。

我没有任何自定义视图,因为我依赖于泛型类。

我的模板:

post_list.html

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

存档页面:

post_archive.html

{% 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块会被触发,但我没有任何意义在控制台中出现并且没有错误。

我错过了什么?是否有更简单的方法可以使所有通用日期视图(yearmonth等)可用?

0 个答案:

没有答案