IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django学习之旅(十)点击不同的日期、分类和标签,跳转到对应的文章列表 -> 正文阅读

[Python知识库]Django学习之旅(十)点击不同的日期、分类和标签,跳转到对应的文章列表

参考追梦人物老师的博客记录的学习过程

本期以归档为例,实现点击不同的归档日期,调转到只包含对应日期的文章列表的首页。

模板页面

_archives.html文件下,新增a标签,标签的url对应为处理该需求的试图函数。

<div class="widget widget-archives">
  <h3 class="widget-title">归档</h3>
  <ul>
    {% for date in date_list %}
      <li>
        <a href="{% url 'blog:archives' date.year date.month %}">
          {{ date.year }}{{ date.month }}</a>
      </li>
    {% empty %}
      暂无归档!
    {% endfor %}
  </ul>
</div>

href="{% url ‘blog:archives’ date.year date.month %}"通过{% url %}模板标签获得一个URL;

其中{% url %}为解析视图函数的url的模板标签。

  • 它接受多个参数,第一个为要解析的视图函数的端点值,使用 'app_name:别名’方式标识;
  • 其余参数为URL的路径参数,如日期中的year或month。
    当点击a标签后网页跳转到对应的视图函数。

定义URL规则

根据模板中的url要求,在blog/urls.py中定义URL规则。

from django.urls import path
from . import views

app_name = 'blog'  # 告诉程序,当前的url模块属于哪个应用,此次是blog应用  ---  试图函数命名空间

urlpatterns = [
    path('', views.index, name='index'),
    path('posts/<int:pk>/', views.detail, name='detail'),
    path('archives/<int:year>/<int:month>/', views.archives, name='archives'),
    path('category/<int:pk>/', views.category, name='category'),
    path('tag/<int:pk>/', views.tag, name='tag')
]

对name=‘archives’ 该URL定义了访问路径,并指定了两个int类型的参数year,month。该路径指向views.archives视图函数。

编写archives视图函数

根据逻辑要求,archives视图函数接受年月两个参数,并返回属于该日期下的所有文章,最后传递给index.html进行渲染。

blog/views.py

def archives(request,year,month):
    """
    根据创建年月查询文章列表
    """
    post_list = Post.objects.filter(
        created_time__year = year,
        created_time__month = month,
    ).order_by('-created_time')
    return render(request, "blog/index.html", context={"post_list":post_list})

其中 Post.objects.filter()方法接受条件参数并返回满足条件的所以对象。
注意:方法中表示属性关系使用双下线 __ 而不是点 .
如created_time__year表示created_time对象的year属性。

整体流程

最终,当我们在网页中点击归档下的某一个日期时,模板根据该日期解析得到对应的视图函数,并将year、month参数传递过去。
在这里插入图片描述
archives方法接受这两个参数,并查询满足条件的文章列表,将其传递给index.html模板。渲染后呈现出来。

对于分类和标签板块,同样的方法。
在这里插入图片描述

实现自动统计不同分类的文章数量

如上图所示,呈现出不同类别下文章的数量。
以分类为例。
blog/modess.py文件下,对Category模型在新增get_count方法,返回类别为当前类别时,文章的数量。

class Category(models.Model):
    """
    blog的分类的模型
    """
  
  ...
    def get_count(self):
        """
        返回当前分类下的文章数量
        """
        posts = Post.objects.filter(category=self)
        return len(posts)

  ...
  

于是在templates\blog\inclusions_archives.html中,可以使用category.get_count获取不同类别的文章数量。


...
    {% for category in category_list %}
      <li>
        <a href="{% url 'blog:category' category.pk  %}">
          {{category.name}}<span class="post-count">({{category.get_count}})</span></a>
      </li>
  ...
  
</div>

小结4种模型数据查询方法

  1. Post.objects.all()

查询Post模型的所有数据,返回的是一个对象列表

  1. Post.objects.dates(‘created_time’,‘month’, order=‘DESC’)

查询Post模型下的日期列表。
接受的第一个参数表示查询哪个属性的日期列表;
第二个参数表示日期列表的属性,到月为止;
第三个参数表示日期列表的排序方式,增序还是降序。

  1. post_list = Post.objects.filter( created_time__year = year, )

查询满足条件的对象列表

  1. get_object_or_404(Post, pk=pk)

查询满足条件的对象,与filter方法不同的是,只能返回满足条件的一个对象,如果有多个对象同时满足则出错。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:00:05  更:2022-06-29 19:00:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:50:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码