想做个博客分页功能,但是没有太多的文章。所以使用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. Java同C#的语法不同之处

    Java同C#的语法不同之处... [注:转载而来但原出处不详:若是您原创请联系我]1,命名空间与包 C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace) Java中与此对 ...

  2. 从ftp获取文件并生成压缩包

    依赖 <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</a ...

  3. JS ES6中export和import详解

    1.Export 模块是独立的文件,该文件内部的所有的变量外部都无法获取.如果希望获取某个变量,必须通过export输出, // profile.js export var firstName = ' ...

  4. Linux Nginx的权限——访问本地目录报错403

    在安装好FastDFS并成功上传图片文件后,根据FastDFS返回的文件地址无法通过HTTP(即浏览器)访问到,报错404或者403. 不管是Error 404还是Error 403,基本都是Ngin ...

  5. css 省略号的写法

    单行省略号 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; width:500px; 多行省略号 overflow: hi ...

  6. POJ 3233-Matrix Power Series( S = A + A^2 + A^3 + … + A^k 矩阵快速幂取模)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20309   Accepted:  ...

  7. VS.NET(C#)--2.8_CCS样式

    CSS样式 文件命名 StyleSheet.css     body { font-size:12px } .button     { color:Red; text-decoration:none; ...

  8. beego 框架基本使用 && 知识点整理

    beego 官网的教程已经整理的非常详细了,但作为一个刚接触的学习者,还是有必要做一下整理,这样在后面使用的时候遇到了不太熟悉的地方,还能反过头来看下自己整理的内容,快速的把知识再捞回来,下面是对官网 ...

  9. iOS - FMDB数据库的使用

    下面不废话了直接上代码

  10. 了解这些后,再去决定要不要买Mac苹果电脑!

    我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统......表砍我...当时买mac的 ...