目录
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