我正在尝试为我正在创建的博客创建一个基于通用日期类的视图,但它似乎不起作用。这就是我所获得的(正则表达式受this gist启发):
"""Creativeflow URL Configuration the blog app."""
from django.conf.urls import url
from .views import BlogListView, BlogDetailView
urlpatterns = [
url(r'posts/(?P<year>\d{4})/(?P<months>\d{2}|\w{3})/(?P<day>\d{2})/(?P<slug>\w+)',
BlogDetailView.as_view(), name="blog-detail"),
url(r'posts(?:/(?P<year>\d{4}))(?:/(?P<months>\d{2}|\w{3}))?(?:/(?P<day>\d{2}))?',
BlogListView.as_view(paginate_by=25), name="blog-list"),
]
我的意见:
class BlogListView(ListView):
"""CBV for list of blog posts."""
model = Post
context_object_name = "blog_objects"
def get_query_set(self):
"""Get the posts in the specified date range.
Year defaults to todays year
Month defaults to last month of the year
Day defaults to last day of the month
"""
now = datetime.now()
year = self.kwargs.get('year', now.year)
month = self.kwargs.get('month', 12)
day = self.kwargs.get('day', calendar.monthrange(year, month)[1])
date = datetime.date(year=year,
month=month,
day=day)
print(date)
print('hello')
return Post.objects.filter(published__lt=date)
转到http://blog.creativeflow.org.uk/posts/2016/07/09
并未向模板提供任何数据post_list.html
:
{% extends "base.html" %}
{% block content %}
<main>
{% for blog in blog_objects %}
<div>
<h3>{{ blog.title }}</h3>
</div>
{% endfor %}
</main>
{% endblock content %}
(如果人们想要,我也可以提供基地)
我的目的是访问posts/2016
获取所有2016年的帖子(因为它默认为2016年底,即2016/12/31
),posts/2016/02
获取2016年2月以来的所有帖子(默认为2016年2月底,即2016/02/29
)等。但运行resolve('/posts/2016/07/09')
会产生错误,因为我在子域上,并使用django-subdomain&#39; s {{3}工作......
>>> reverse('blog-list', subdomain="blog", kwargs={"year":"2016", "months":"02", "day":"13"})
'http://blog.creativeflow.org.uk/posts/2016/02/13'
但我在浏览器中的尝试不会返回任何内容。尽管我有两份打印报告,但在刷新页面时,我也没有在终端上打印任何内容。
我觉得有些事情让我很遗憾,这显然很明显,但是我很难连接点。
如何使这条路线有效?
答案 0 :(得分:0)
这有效,我的两个主要问题是
您在网址模式中使用关键字months,但在尝试撤消时使用月份。
我相信只需要解决这个问题。