想做个博客分页功能,但是没有太多的文章。所以使用shell命令行创建多篇文章。

1、打开pycharm下的terminal终端

python manage.py shell  # 打开python终端

导入模型

from blog.models import Blog
from django.contrib.auth.models import User
from blog.models import BlogType

批量创建:

>>> blog.author=user
>>> blog.blog_type=blogtype
>>> blog.content="shell第一篇中的内容"
>>> blog.save()
>>> for i in range(1,51):
... blog=Blog()
... blog.author=user
... blog.blog_type=blogtype
... blog.content="shell 下第{}篇内容".format(i)
... blog.title="shell 下第{}篇".format(i)
... blog.save()

这样就批量创建了50篇内容。

内容多了就需要添加分页的功能。

1、变更的内容

2、上代码

{% extends 'base.html' %}
{% load staticfiles %}
{# 标题 #}
{% block title %}
felix Blog
{% endblock %} {% block header_extends %}
<link rel="stylesheet" href="{% static 'blog/blog.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome-free-5.5.0-web/css/all.min.css' %}">
{% endblock %} {# 内容#}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="card" style="">
<div class="card-header"><h5 class="card-title">{% block blog_type_title %}博客列表(一共有
{{ page_of_blogs.paginator.count }}篇博客){% endblock %}</h5></div>
<div class="card-body">
{% for blog in page_of_blogs.object_list %}
<div class="blog">
<h3><a href="{% url 'blog_detail' blog.pk %}">{{ blog.title }}</a></h3>
<div class="blog-info">
<p>
{# 添加图标 #}
<i class="fas fa-tag"></i>
<a href="{% url 'blogs_with_type' blog.blog_type.pk %}">
{{ blog.blog_type }}
</a>
<i class="far fa-clock "></i>
{{ blog.created_time|date:"Y-m-d" }}
<p>
</div>
<p>{{ blog.content|truncatechars:30 }}</p>
</div>
{% empty %}
<div class="blog">
<h3>--暂无博客,敬请期待--</h3>
</div>
{% endfor %}
</div> {# 分页 #}
<nav aria-label="Page navigation">
<ul class="pagination">
{# 上一页 #}
{% if page_of_blogs.has_previous %}
<li class="page-item"><a class="page-link"
href="?page={{ page_of_blogs.previous_page_number }}">上一页</a>
</li>
{% else %}
<li class="page-item disabled"><a class="page-link" href="#">上一页</a></li>
{% endif %}
{# 全部页码 #}
{% for page_num in page_of_blogs.paginator.page_range %}
<li class="page-item"><a class="page-link"
href="?page={{ page_num }}">{{ page_num }}</a></li>
{% endfor %}
{# 下一页 #}
{% if page_of_blogs.has_next %}
<li class="page-item"><a class="page-link"
href="?page={{ page_of_blogs.next_page_number }}">下一页</a></li>
{% else %}
<li class="page-item disabled"><a class="page-link" href="#">下一页</a></li>
{% endif %}
</ul>
</nav> </div>
</div>
<div class="col-md-4">
<div class="card" style="">
<div class="card-header"><h5 class="card-title">博客分类</h5></div>
<div class="card-body">
<ul class="blog-types">
{% for blog_type in blog_types %}
<li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a>
</li>
{% empty %}
<li>暂无分类</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% block js %}
<script>
$(".nav-blog").addClass("active").siblings().removeClass("active");
</script>
{% endblock %}

blog_list.html

from django.db import models
from django.contrib.auth.models import User # Create your models here. # 博客分类
class BlogType(models.Model):
type_name = models.CharField(max_length=15) # 博客分类名称 def __str__(self): # 显示标签名
return self.type_name # 博客
class Blog(models.Model):
title = models.CharField(max_length=50) # 博客标题
blog_type = models.ForeignKey(BlogType, on_delete=models.DO_NOTHING) # 博客分类
content = models.TextField() # 博客内容
author = models.ForeignKey(User, on_delete=models.DO_NOTHING) # 博客作者
created_time = models.DateTimeField(auto_now_add=True) # 博客创建时间
last_updated_time = models.DateTimeField(auto_now=True) # 博客更新事件 def __str__(self): # 显示标题名
return "<Blog:{}>".format(self.title) class Meta:
ordering = ['-created_time'] # 定义排序规则,按照创建时间倒序

models.py

from django.shortcuts import render_to_response, get_object_or_404
from .models import Blog, BlogType
from django.core.paginator import Paginator # Create your views here. # 博客列表
def blog_list(requests):
# 分页
blogs_all_list = Blog.objects.all() # 获取全部博客
paginator = Paginator(blogs_all_list, 10) # 第一个参数是全部内容,第二个是每页多少
page_num = requests.GET.get('page', 1) # 获取url的页面参数(get请求)
page_of_blogs = paginator.get_page(page_num) # 从分页器中获取指定页码的内容 context = {
'page_of_blogs': page_of_blogs,
'blog_types': BlogType.objects.all(),
}
return render_to_response('blog/blog_list.html', context) # 博客详情
def blog_detail(requests, blog_pk):
context = {
'blog': get_object_or_404(Blog, pk=blog_pk)
} return render_to_response('blog/blog_detail.html', context) def blogs_with_type(requests, blog_type_pk):
blog_type = get_object_or_404(BlogType, pk=blog_type_pk)
context = {
'blogs': Blog.objects.filter(blog_type=blog_type),
'blog_type': blog_type,
'blog_types': BlogType.objects.all(),
}
return render_to_response('blog/blog_with_type.html', context)

views.py

3、python内置分页器

django的内置分页器为Paginator

用法:

>>> from blog.models import Blog
>>> from django.core.paginator import Paginator
>>> paginator=Paginator(Blog.objects.all(),10)
>>> pages=paginator.get_page(1)
>>> dir(pages)
['__abstractmethods__', '__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__weakref__', '_abc_cache', '_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', 'count', 'end_index', 'has_next', 'has_other_pages', 'has_previous', 'index', 'next_page_number', 'number', 'object_list', 'paginator', 'previous_page_number', 'start_index']
>>>

从dir(pages)可以看到很多属性和方法。

比如说:

count  个数

has_next 是否有下一页

has_previous  是否有上一页

next_page_number  下一页的页码

previous_page_number  上一页的页码

搭建自己的博客(九):使用shell模式批量添加博客文章并增加分页功能的更多相关文章

  1. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  2. 利用shell实现批量添加用户

    批量添加用户并设置随机密码,把添加的用户的名字和密码保存到文件中. [root@lamp scripts]# cat user.sh #!/bin/sh ` do pass=$(-) //取随机数的方 ...

  3. shell脚本 批量添加删除用户

    2021-07-26 1.批量添加用户 # 编写脚本 vi add_student_50.sh # 添加用户组 student groupadd student # 添加用户 student1-stu ...

  4. Shell 脚本批量添加用户和用户密码

    #!/bin/bash#批量添加用户 设置密码for i in `seq 1 10`do if ! id user$i &> /dev/null then useradd user$i ...

  5. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  6. 【干货】2个小时教你hexo博客添加评论、打赏、RSS等功能 (转)

    备注:该教程基于Hexo 2.x版本,目前Hexo是3.x版本,照本教程实现有可能会出现404错误,笔者目前还未找时间去解决,待笔者找时间解决该问题后,再写一篇该问题的解决教程,给各位读者带来困扰,还 ...

  7. 小博客| 登录 | 注册 | 留言 | 提Bug 小博客

     浏览(1502)  赞(29) 一直以来都想开发一个自己的网站,总想做一个网站然后让千千万万的人去访问,去使用,然后收到热烈的好评, 再然后某某著名机构有意投资我的网站(其实收购也是没有问题的), ...

  8. 做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计

    项目搭建好了之后是不是可以编码了呢? 等等不要着急,我们是不是应该先设计一下?比如博客的功能等? 博客设计 先做个简单的个人博客,因为是个人版,所以可以省略注册.登录这些功能,表结构也可以简单一点. ...

  9. 基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

随机推荐

  1. Fiddler讲解3

    想要 浏览更多Fiddler内容:请点击进入Fiddler官方文档 阅读目录: 一.Fiddler自定义请求: 二.Fiddler修改请求: 三.减少期望的延迟:100个继续标题: 四.重命名无效的P ...

  2. .net framework 4.0 安装一直失败,错误代码0x80240037,解决

    本文链接:https://blog.csdn.net/Chris_Ime/article/details/81626778 今天遇到一问题,在新电脑win7系统上安装.net framework 4. ...

  3. 原生 js 录屏功能

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  4. idea .gitignore模板

    IDEA 创建的项目,需要搞个.gitignore文件,文件内容可以参考插件的. # Created by .ignore support plugin (hsz.mobi) ### JetBrain ...

  5. JAVA 插入注解处理器

    JDK1.5后,Java语言提供了对注解(Annotation)的支持 JDK1.6中提供一组插件式注解处理器的标准API,可以实现API自定义注解处理器,干涉编译器的行为. 在这里,注解处理器可以看 ...

  6. 【转载】C#使用FirstOrDefault方法快速查找List集合中符合条件的第一个实体

    在C#的List集合的操作中,有时候我们需要根据相关条件快速从List集合中获取到第一个符合条件的实体对象,例如有个全校班级的List集合,我们需要根据班级代码快速从List集合中查找出班级信息.可以 ...

  7. html的基础知识点

    小编为大家带来html的基础知识Web 标准的好处让Web的发展前景更广阔 内容能被更广泛的设备访问更容易被搜寻引擎搜索降低网站流量费用使网站更易于维护提高页面浏览速度Web 标准构成Web标准不是某 ...

  8. dos中查找端口的PID,并在任务管理器中处理端口

    本文来源https://www.cnblogs.com/lsyf/p/8979012.html 1.查看所有端口进程 首先点击开始菜单选择运行,接着在运行对话框中输入“cmd”,回车打开命令提示符窗口 ...

  9. 《ABCD组》实验十一 团队作业7:团队项目设计完善&编码

    <ABCD组>实验十一 团队作业7:团队项目设计完善&编码 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  10. 云计算(3)-what is new in today's Cloud

    What is new in today's Cloud Four features new in today's Clouds 如果一个problem有以上4个features里面的一个或者多个,则 ...