首页 > 其他分享 >Django博客开发教程:实现文章列表

Django博客开发教程:实现文章列表

时间:2023-08-16 13:45:45浏览次数:35  
标签:lid paginator 教程 list 列表 html 文章 Django id

文章列表的URL是:网站域名/list-分类ID.html,文章列表页面需要调用的地方相对首页就少了很多。我这边就不再像首页那样做详细解释了。

直接上视图函数代码:

blog/views.py

#文章列表
def list(request,lid):
    list = Article.objects.filter(category_id=lid)#获取通过URL传进来的lid,然后筛选出对应文章
    cname = Category.objects.get(id=lid)#获取当前文章的栏目名
    remen = Article.objects.filter(tui__id=2)[:6]#右侧的热门推荐
    allcategory = Category.objects.all()#导航所有分类
    tags = Tag.objects.all()#右侧所有文章标签
    return render(request, 'list.html', locals())

大家留意一下Article.objects.filter(category_id=lid),通过filter查询到的是多个文章对象,(request,lid)这里面的lid是通过url传过来的,表示分类的id,然后我们在视图函数里接收。category_id=lid表示筛选出文章里分类id与传过进来的id相等文章。id=lid则是在文章分类里筛选出id与lid相同的分类,然后在列表页里展现。

大家可能也留意到了,我们这个视图函数里和首页视图函数对比少了一个context = {...}而多了一个locals(),这个locals()代替了context,locals()的作用是返回一个包含当前作用域里面的所有变量和它们的值的字典。由于后面我们进行代码优化的时候用的着,所以先介绍给大家。

打开templates/list.html页面。你的位置,后面的代码修改为:

templates/list.html

您的位置: <a itemprop="breadcrumb" href="/">首页</a> » 
<span class="current">Python</span></div>
修改为: 
<a itemprop="breadcrumb" href="{% url 'index' %}">首页</a> » 
<span class="current">{{ cname }} </span></div>

分类:

templates/list.html

<h4 class="post-left-title">分类:Python</h4>
修改为:
<h4 class="post-left-title">分类:{{ cname}}</h4>

文章列表展示修改为:

templates/list.html

{% for list in list %}
    <div class="article-box clearfix excerpt-1">
        <div class="col-md-4">
            <div class="thumbnail">
                <a href="{% url 'index' %}show-{{ list.id }}.html" title="{{ list.title }}">
                    <img src="media/{{ list.img }}"
                         srcset="media/{{ list.img }}"
                         alt="{{ list.title }}" class="wp-post-image" width="240" height="160"/></a>
            </div>
        </div>
        <div class="col-md-8">
            <h2><a href="{% url 'index' %}show-{{ list.id }}.html" target="_blank"
                   title="{{ list.title }}">{{ list.title }}</a></h2>
            <p class="txtcont hidden-xs"><a href="{% url 'index' %}show-{{ list.id }}.html"
                                            target="_blank"
                                            title="{{ list.title }}">{{ list.excerpt }}</a></p>
            <div class="meta"><span class="label label-info"><a
                    href="{% url 'index' %}list-{{ list.category_id }}.html">{{ list.category.name }}</a></span>
                <time class="item"><i
                        class="fa fa-clock-o"></i>{{ list.created_time|date:"Y年m月d日" }}
                </time>
            </div>
        </div>
    </div>
{% endfor %}

最后是文章分页,如果文章数量太多,我们需要对查询出来的数据进行分页展示。Django自带一个强大的分页功能插件,我们使用的时候,先在视图函数里导入,然后再使用。

blog/views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
#导入分页插件包
def list(request,lid):
    ...
    page = request.GET.get('page')#在URL中获取当前页面数
    paginator = Paginator(list, 5)#对查询到的数据对象list进行分页,设置超过5条数据就分页
    try:
        list = paginator.page(page)#获取当前页码的记录
    except PageNotAnInteger:
        list = paginator.page(1)#如果用户输入的页码不是整数时,显示第1页的内容
    except EmptyPage:
        list = paginator.page(paginator.num_pages)#如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
    return render(request, 'list.html', locals())

分页代码修改为:

templates/list.html

<div class="pagination">
    <ul>
        <li class="prev-page"></li>
        <li class="active"><span>1</span></li>
        <li><a href="?page=2">2</a></li>
        <li class="next-page"><a href="?page=2">下一页</a></li>
    </ul>
</div>

修改为:

<div class="pagination">
    <ul>
        {% if list.has_previous %}
        <li class="prev-page"><a href="?page={{ list.previous_page_number }}">上一页</a></li>
        {% else %}
         <li class="prev-page"></li>
        {% endif %}


            {% for num in list.paginator.page_range %}
                {% if num %}
                    {% ifequal num list.number %}
                        <li class="active"><span>{{ num }}</span></li>
                    {% else %}
                        <li><a href="?page={{ num }}">{{ num }}</a></li>
                    {% endifequal %}
                {% else %}
                    <li class="disabled"><span>...</span></li>
                {% endif %}
            {% endfor %}


            {% if list.has_next %}
                <li class="next-page"><a href="?page={{ list.next_page_number }}">下一页</a></li>
            {% else %}
                <li class="prev-page"></li>
            {% endif %}
    </ul>
</div>

这个分页代码就不做过多解释,大家有不明白的可以加我微信:VIPdjango进行咨询,也可以自行百度。

至此,列表页面实现完毕。

标签:lid,paginator,教程,list,列表,html,文章,Django,id
From: https://www.cnblogs.com/yoloooo/p/17633788.html

相关文章

  • 无涯教程-Perl - sleep函数
    描述此函数将脚本暂停EXPR秒,如果未指定EXPR,则暂停脚本。返回实际睡眠的秒数。可以被信号处理程序打断,但是您应该避免使用带Alert的睡眠,因为许多系统将Alert用于睡眠实现。语法以下是此函数的简单语法-sleepEXPRsleep返回值此函数返回整数,实际睡眠的秒数例以下......
  • kubeadm 部署的集群升级教程
    1、确定升级的集群版本,查看现有的集群版本kubectl getnodes2、执行如下命令确定升级的版本,目标版本是v1.27.4yumlist--showduplicateskubeadm--disableexcludes=kubernetes3、升级master节点,所有master节点都要操作,并升级完验证版本yuminstall-ykubeadm-1.27.4-0-......
  • 无涯教程-Perl - sin函数
    描述此函数返回EXPR的正弦值;如果未指定,则返回$_。此函数始终返回浮点数。语法以下是此函数的简单语法-sinEXPRsin返回值此函数返回EXPR的浮点正弦值例以下是显示其基本用法的示例代码-#!/usr/bin/perl$temp=sin(4);print"sinvalueof4is$temp";执行上......
  • IDEA 2023.2 最新安装使用教程(附激活码,亲测好用)
    申明:本教程IntelliJIDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!PS:本教程最新更新时间:2023年7月28日,持续更新,收藏防失联哟说明本教程适用于JetBrains全系列产品,包括IDEA、Pycharm、WebStorm、Phpstorm、Da......
  • 客服系统搭建教程,这些技巧你必须掌握!
    随着企业对客户服务需求的不断增加,客服系统的搭建成为了一项重要的任务。一个高效、稳定的客服系统能够提升客户满意度,增强企业竞争力。那么,在搭建客服系统时,有哪些技能是我们必须掌握的呢?了解客户需求在搭建客服系统之前,我们需要深入了解客户的需求,包括客户群体、服务内容、......
  • 嵌入式教程_DSP教学实验箱:2-9 VGA显示实验
    实验目的本节视频的目的是了解VGA接口的功能和使用,掌握VGA显示的原理并实现VGA显示图像数据。实验原理底板原理图控制VGA的管脚是VPIF总线,和控制LCD显示的管脚是复用的VGA(VideoGraphicsArray)VGA是视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由IBM公司于1987年推出,因其......
  • 【开源分享】在线客服系统搭建-基于php和swoole客服系统CRMchat(附源码完整搭建教程)
    CRMChat是一款开源的在线客服系统,后台管理使用thinkphp框架,消息通讯使用swoole扩展,现在我来部署搭建一下。这是一款不可商用的开源客服系统,如果有商用需求可以访问我的网站:gofly.v1kf.com域名解析以阿里云为例,我添加了自己的二级域名crmchat.v1kf.com到服务器IPPHP扩展安装......
  • Python教程(9)——Python变量类型列表list的用法介绍
    (目录)在Python中,列表(list)是一种有序、可变的数据结构,用于存储多个元素。列表可以包含不同类型的元素,包括整数、浮点数、字符串等。实际上列表有点类似C++语言中的数组,但仅仅只是类似,和数组还是有点不一样的。列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常......
  • python 全国省名列表
    ['吉林','天津','台湾','云南','海南','山西','四川','山东','江西','浙江','辽宁','福建','湖北','江苏','内蒙古','宁夏'......
  • Python教程(9)——Python变量类型列表list的用法介绍
    在Python中,列表(list)是一种有序、可变的数据结构,用于存储多个元素。列表可以包含不同类型的元素,包括整数、浮点数、字符串等。实际上列表有点类似C++语言中的数组,但仅仅只是类似,和数组还是有点不一样的。列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常发生改......