分页功能:
views.py中:
创建回复博客数据库表:
views.py中:
from django.shortcuts import render,redirect,reverse,HttpResponse
from .models import Blog,ReplyBlog
from kake.models import BlogUser
from datetime import datetime
from math import ceil
from django.core.paginator import * #分页对象
from django.core.serializers import serialize
'''def show(request,pageNo=1):
if request.POST.get('pageNo') is not None:
pageNo=int(request.POST.get('pageNo'))
#从数据库查询所有博客记录
#获取第几页,每页显示的最大记录数
#select * from tablename limit (pageNo-1)*pageSize,pageSize
pageSize = 4
beginIndex=(pageNo-1)*pageSize
blogList=Blog.objects.all().order_by('-createTime')[beginIndex:(pageNo-1)*pageSize+pageSize]
pages=ceil(Blog.objects.count()/4)
return render(request,'manager/show.html',{'blogList':blogList,'pageNo':pageNo,'pages':pages})'''
def show(request,pageNo=1):
if request.POST.get('pageNo') is not None:
pageNo=int(request.POST.get('pageNo'))
#从数据库查询所有博客记录
#获取第几页,每页显示的最大记录数
pageSize=4
pg=Paginator(Blog.objects.all().order_by('-createTime'),pageSize)#得到所有对象
pages=pg.page(pageNo)#当前页对象
return render(request,'manager/show.html',{'pg':pg,'pages':pages})
show.html中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>欢迎{{ request.session.username }}!</h3>
{% comment %}{% for blog in blogList %}
<a href="/blogmanager/blogDetail/{{ blog.id }}">{{ blog.title }}</a> || 作者:{{ blog.blogUser.userName }} || 创建时间:{{ blog.createTime | date:"Y年m月d日 H:i:s"}}
<br/>
{% endfor %}
<a href="/blogmanager/show/1">首页</a>
{% if pageNo > 1 %}
<a href="/blogmanager/show/{{ pageNo | add:-1 }}">上一页</a>
{% endif %}
{% if pageNo < pages %}
<a href="/blogmanager/show/{{ pageNo | add:+1 }}">下一页</a>
{% endif %}
<a href="/blogmanager/show/{{ pages }}">尾页</a>
<form action="/blogmanager/show" method="post">
{% csrf_token %}
跳转到:<input type="text" size="3" name="pageNo"/>
<input type="submit" value="GO">
</form>{% endcomment %}
{% for blog in pages %}
标题:<a href="/blogmanager/blogDetail/{{ blog.id }}">{{ blog.title }}</a>
作者:{{ blog.blogUser.userName }}
创建时间:{{ blog.createTime | date:"Y年m月d日 H:i:s"}}<br/>
{% endfor %}
{% for i in pg.page_range %}
<a href="/blogmanager/show/{{ i }}">{{ i }}</a>
{% endfor %}<br/>
<a href="/blogmanager/show/1">首页</a>
{% if pages.has_previous %}
<a href="/blogmanager/show/{{ pages.number | add:-1}}">上一页</a>
{% endif %}
{% if pages.has_next %}
<a href="/blogmanager/show/{{ pages.number | add:1}}">下一页</a>
{% endif %}
<a href="/blogmanager/show/{{ pg.num_pages }}">尾页</a><br/>
<a href="/blogmanager/addBlog">发表博客</a>
</body>
</html>
实现回复博客:
创建回复博客数据库表:
from django.db import models
from datetime import datetime
from kake.models import BlogUser
class ReplyBlog(models.Model):
content=models.CharField(max_length=200,null=False)
replyTime=models.DateTimeField(default=datetime.now())
replyUser=models.ForeignKey(BlogUser,on_delete=None)
blog=models.ForeignKey(Blog,on_delete=None)
views.py中:
def blogDetail(request,id):
blog=Blog.objects.get(pk=id)
return render(request,'manager/detail.html',{'blog':blog})
def replyBlog(request):
if request.session.get('username') is None:
return render(request, 'login.html')
else:
#获取blog的id,回复内容
bid=int(request.POST.get('id'))
replyContent=request.POST.get('replyContent')
#将回复内容存储到回复表中
myReply=ReplyBlog()
myReply.content=replyContent
myReply.replyUser=BlogUser.objects.filter(userName=request.session.get('username')).first()
myReply.blog=Blog.objects.get(pk=bid)
myReply.save()
#查询所有当前博客的回复记录
blogReplyList=ReplyBlog.objects.filter(blog_id=bid)
#将blogReplyList转成json格式
jsonobj=serialize('json',blogReplyList)
return HttpResponse(jsonobj)
在博客内容页面detail.html添加回复功能:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.replydv1{background-color: #3accc6;color:#0d3349;}
.replydv2{background-color: #3ce6f7;color:#0d3349;}
</style>
<script type="text/javascript" src="/static/js/jquery-1.11.1.js"></script>
<script type="text/javascript">
$(function () {
//给点击按钮注册点击事件
$("input[type='button']").click(function () {
//当点击回复按钮时获取文本框内容
val=$("#reply").val()
var csrftoken=$("input[name='csrfmiddlewaretoken']").val()
//如果用户名为空
if(val.trim().length==0||val==null){
$("#txtSpan").html("回复内容不能为空")
}else {
$.ajax({
url: "/blogmanager/replyBlog",
type: "post",
data: {"id":{{blog.id}}, "replyContent": val, "csrfmiddlewaretoken": csrftoken},
dataType: "json",
success: function (response,data) {
//console.error(data);
var str="";
$.each(response, function (i, item) { //response为返回结果,是一个array,然后对该array进行遍历,fields属性中包含所有查询内容,pk为每条结果的主键字段
var vfields = item.fields
if(i%2==0){
str="<div class='replydv1'>回复内容:"+vfields.content+" 回复时间:"+vfields.replyTime+" 回复人:{{ request.session.username }}</div>"+str;
}else{
str="<div class='replydv2'>回复内容:"+vfields.content+" 回复时间:"+vfields.replyTime+" 回复人:{{ request.session.username }}</div>"+str;}
});
$("#dv").html(str);
}
});
}
});
});
</script>
</head>
<body>
{% csrf_token %}
<a href="/blogmanager/show">返回主页</a><br/>
标题:{{ blog.title }}<br/>
作者:{{ blog.blogUser.userName }}<br/>
创建时间:{{ blog.createTime | date:"Y年m月d日 H:i:s" }}<br/>
{% autoescape off %}
内容:{{ blog.content }}
{% endautoescape %}
<div style="background-color: #3db7b8" id="dv">
</div>
<input type="text" name="reply" id="reply"><span style="font-size: 12px;color: red" id="txtSpan"></span>
<input type="button" value="回复">
</body>
</html>