Django - 上下篇博客和按月分类

filter筛选条件

在这里插入图片描述

筛选上一篇博客和下一篇博客

blogs = get_object_or_404(Blog, pk=blog_pk)
    # 上一篇博客
    context['previous_blog'] = Blog.objects.filter(created_time__gt=blogs.created_time).last()
    # 下一篇博客
    context['next_blog'] = Blog.objects.filter(created_time__lt=blogs.created_time).first()

修改前端页面

<div class="blog-more">
	<p>上一篇: 
	    {% if previous_blog %}
	        <a href="{% url 'blog_detail' previous_blog.pk %}">{{ previous_blog.title }}</a>
	    {% else %}
	        没有了
	    {% endif %}
	</p>
	<p>下一篇: 
	    {% if next_blog %}
	        <a href="{% url 'blog_detail' next_blog.pk %}">{{ next_blog.title }}</a>
	    {% else %}
	        没有了
	    {% endif %}
	</p>
	</div>

exclude排除条件

用法和filter一样, 都是得到查询(QuerySet), 相当于filter条件取反

条件中的双下划线

  • 可以作为一个查询的类型
    • 外键拓展 : blog_type__id
    • 日期拓展 : 比如查询年份为2020年
      • Blog.objects.filter(created_time__year=2020)

添加按月分类

添加按月分类博客url限制

path('date/<int:year>/<int:month>' views.blog_with_date, name='blog_with_date'),

添加按日期查询的方法

context['blog_dates'] = Blog.objects.dates('created_time', 'month', order='DESC')

按日期显示博客页面

{% extends 'blog/blog_list.html' %}

{% block title %}{{ blog_type.type_name }}{% endblock %}

{% block block_list_title %}
    分类: {{ blog_with_date }}
{% endblock %}

把方法里面共同的部分提取

def get_blog_list_common_data(request, blogs_all_list):
    # 创建分页器, 每10页分页
    paginator = Paginator(blogs_all_list, 2)
    # 获取get请求url里面的页码参数
    page_num = request.GET.get('page', 1)
    # 根据页码获取模型的QuerySet, 给定模型的对象列表 
    page_of_blogs = paginator.get_page(page_num)
    # 获取当前页码
    currentr_page_num = page_of_blogs.number
    # 使用列表推导式计算页码页
    page_range = [x for x in range(currentr_page_num-2,currentr_page_num+3) 
                 if x in paginator.page_range]
    
    # 添加省略号
    if page_range[0] - 1 >= 2:
        page_range.insert(0, '...')

    # 添加第一页
    if page_range[0] != 1:
        page_range.insert(0, 1)

    context = {}
    context['page_range'] = page_range
    context['page_of_blogs'] = page_of_blogs
    context['blog_types'] = BlogType.objects.all()
    context['blog_dates'] = Blog.objects.dates('created_time', 'month', order='DESC')
    return context
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值