功能增加:如图
image.png
实现方法:filter方法,方法如下:
image.png
修改views.py中的内容:
image.png
然后修改blog\_detail.html的显示结构和内容:
image.png
效果如图:
image.png
image.png
但现在希望如果上一篇和下一篇没有的话写没有了,下一篇同样,另外希望上下篇可以点击,修改blog\_detail.html内容如下:
image.png
效果如下:
image.png
image.png
修改新增的blog-more的样式在blog.css中:

div.blog-more{
    margin-top:1 em;
}

image.png
image.png
新功能增加:添加新的分类,可以按年/月分类,点开后是对应时间内的所有博文
image.png
先写url的匹配地址:

localhost.8000/date/2019/3  来访问2019年3月的所有博文
image.png
修改blog\_list.html中的内容:
image.png
然后从数据库中拿取数据:修改views.py中的blog\_list函数:
image.png
接着修改blog\_list.html中的日期归档内容:
image.png
效果如下:
image.png
去掉前面的点:base.css,并将日期哪里变成超链接:base.css

* {
    margin: 0;
    padding: 0;
}


body {
    margin-top: 70px!important;
}
ul {
    list-style-type: none!important;
}

image.png
效果如图:
image.png
bug:日期归档里面还有点,去除失败!

添加点击日期归档内容后的视图函数:

def blogs_with_date(request,year,month):
    """
    localhost.8000/date/2019/3  来查询2019年3月的所有博文,复制上面的内容,修改局部内容
    """
    context = {}
    # 按照要求的时间来查询博客内容
    blogs_all_list = Blog.objects.filter(created_time__year=year, created_time__month=month)


    paginator = Paginator(blogs_all_list, settings.EACH_PAGE_BLOGS_NUMBER)
    page_num = request.GET.get('page', 1)  # 获取url的页码参数(GET请求)
    page_of_blogs = paginator.get_page(page_num)
    currentr_page_num = page_of_blogs.number  # 获取当前页码
    # 获取当前页面前后各2页的页码范围
    page_range = list(range(max(currentr_page_num - 2, 1), currentr_page_num)) + \
                 list(range(currentr_page_num, min(currentr_page_num + 2, paginator.num_pages) + 1))
    # 加上省略页码标记
    if page_range[0] - 1 >= 2:
        page_range.insert(0, '...')
    if paginator.num_pages - page_range[-1] >= 2:
        page_range.append('...')
    # 加上首页和尾页
    if page_range[0] != 1:
        page_range.insert(0, 1)
    if page_range[-1] != paginator.num_pages:
        page_range.append(paginator.num_pages)


    context = {}
    context['blogs_with_date'] = '%s年%s月' % (year,month)  # 15节新加
    context['blogs'] = page_of_blogs.object_list
    context['page_of_blogs'] = page_of_blogs
    context['page_range'] = page_range
    context['blog_types'] = BlogType.objects.all()
    context['blog_dates'] = Blog.objects.dates('created_time','month',order='DESC')
    return render(request, 'blog/blogs_with_date.html', context)

然后创建blogs\_with\_date.html文件(基本和blogs\_with\_type.html文件一样,唯一区别在于左上角的博客列表改成“xx年xx月的博客";

{% extends 'blog/blog_list.html' %}
{% block title %}{{ blog_type.type_name }}{% endblock %}


{% block blog_list_title %}
    日期分类:{{ blogs_with_date }}
    <a href="{% url 'blog_list' %}">查看全部博客</a>
{% endblock %}

现在可以点击日期归档中的内容了,但是代码有太多重复的内容了,需要精简一下:将共同的内容放在一个函数中,其他的调用一下即可!

views.py全部代码如下

from django.shortcuts import render, get_object_or_404
from django.core.paginator import Paginator
from django.conf import settings
from .models import Blog, BlogType


def get_blogs_list_common_data(request, blogs_all_list):
    paginator = Paginator(blogs_all_list, settings.EACH_PAGE_BLOGS_NUMBER)
    page_num = request.GET.get('page', 1)  # 获取url的页码参数(GET请求)
    page_of_blogs = paginator.get_page(page_num)
    currentr_page_num = page_of_blogs.number  # 获取当前页码
    # 获取当前页面前后各2页的页码范围
    page_range = list(range(max(currentr_page_num - 2, 1), currentr_page_num)) + \
                 list(range(currentr_page_num, min(currentr_page_num + 2, paginator.num_pages) + 1))
    # 加上省略页码标记
    if page_range[0] - 1 >= 2:
        page_range.insert(0, '...')  # 0表示位置,后面的省略号表示要插入的内容
    if paginator.num_pages - page_range[-1] >= 2:
        page_range.append('...')  # 使用append来将省略号插入到页码的最后
    # 加上首页和尾页
    if page_range[0] != 1:
        page_range.insert(0, 1)
    if page_range[-1] != paginator.num_pages:
        page_range.append(paginator.num_pages)


    context = {}
    context['blogs'] = page_of_blogs.object_list
    context['page_of_blogs'] = page_of_blogs
    context['page_range'] = page_range
    context['blog_types'] = BlogType.objects.all()
    context['blog_dates'] = Blog.objects.dates('created_time', 'month', order="DESC")
    return context


def blog_list(request):
    blogs_all_list = Blog.objects.all()
    context = get_blogs_list_common_data(request, blogs_all_list)
    return render(request,'blog/blog_list.html', context)


def blogs_with_type(request, blog_type_pk):
    blog_type = get_object_or_404(BlogType, pk=blog_type_pk)
    blogs_all_list = Blog.objects.filter(blog_type=blog_type)
    context = get_blogs_list_common_data(request, blogs_all_list)
    context['blog_type'] = blog_type
    return render(request,'blog/blogs_with_type.html', context)


def blogs_with_date(request, year, month):
    """
    localhost.8000/date/2019/3  来查询2019年3月的所有博文,复制上面的内容,修改局部内容
    """
    blogs_all_list = Blog.objects.filter(created_time__year=year, created_time__month=month)
    context = get_blogs_list_common_data(request, blogs_all_list)
    context['blogs_with_date'] = '%s年%s月' % (year, month)  # 15节新加
    return render(request,'blog/blogs_with_date.html', context)


def blog_detail(request, blog_pk):
    """
      打开某一个博文后的显示内容
      """
    context = {}
    blog = get_object_or_404(Blog, pk=blog_pk)
    # 上一条博客:创建时间大于当前打开博客的创建时间的所有博文,在使用last取其中最后一条博文
    context['previous_blog'] = Blog.objects.filter(created_time__gt=blog.created_time).last()
    # 下一条博文同理
    context['next_blog'] = Blog.objects.filter(created_time__lt=blog.created_time).first()
    context['blog'] = blog
    return render(request,'blog/blog_detail.html', context)

笨小孩
20 声望3 粉丝

你,要怎样度过这一生?有的人二十岁已经死了,有的人七十岁还在发现生命的可能,有人终其一生,不知道自己要的是什么;有人简单执拗,终其一生;忠于自我未必有结果,坚持努力也不一定换来成功,但有天,回望过...