Django实现博客主页(/分页/)

目标:

实现

view函数部分:

from django.shortcuts import render,HttpResponse,redirect
from django.forms import Form,fields,widgets
from django.core.exceptions import ValidationError
from app01 import models
from utils.pager import PageInfo
from utils.check_code import rd_check_code
from io import BytesIO
def index(request,*args,**kwargs):
    if request.method=='GET':
        type_id = int(kwargs.get('type_id')) if kwargs.get('type_id') else None
        condition = {}
        if type_id:
            condition['article_type_id'] = type_id
        type_list = models.Article.type_choices
        model = request.path_info
        print(request.path_info)
        current_page = request.GET.get('nid')
        per_page = 3
        total = models.Article.objects.filter(**condition).count()
        pageInfo_obj = PageInfo(current_page, total, per_page, model)  # total is the total of database
        start = pageInfo_obj.start()
        end = pageInfo_obj.end()
        obj=models.Article.objects.filter(**condition).order_by('-read_count')[start:end]
        return render(request,'index.html',{'obj':obj,'type_list':type_list,'type_id':type_id,'id': current_page, 'PageInfo': pageInfo_obj})

page类包:

class PageInfo():
    def __init__(self,current_page,total,per_page,model):
        try:
            self.current_page=int(current_page)
        except Exception as e:
            self.current_page=1
        self.total=total
        self.per_page = per_page
        a, b = divmod(self.total, self.per_page)
        if b:
            a = a + 1
        self.page_num = a
        self.model=model
    def start(self):
        return (self.current_page-1)*self.per_page
    def end(self):
        return (self.current_page)*self.per_page
    def run(self):
        total_num=11
        avg_page=int(total_num/2)
        tmpList=[]
        if self.page_num<total_num:
            before=1
            after=self.page_num
        else:
            if self.current_page - avg_page<=0:
                before=1
                after=11
            elif self.current_page + avg_page>=self.page_num:
                before=self.page_num-total_num+1
                after=self.page_num
            else:
                before=self.current_page-avg_page
                after=self.current_page+avg_page
        if self.current_page==1:
            prev ='<li><a href="#" aria-label = "Previous"><span aria-hidden = "true">上一页</span></a></li>'
        else:
            # prev='<a href="%s?nid=%s">上一页</a>'%(self.model,self.current_page-1)
            prev='<li><a href="%s?nid=%s" aria-label = "Previous"><span aria-hidden = "true">上一页</span></a></li>'%(self.model,self.current_page-1)
        tmpList.append(prev)
        for i in range(before,after+1):
            if i==self.current_page:
                tmpStr = '<li class="active"><a href="%s?nid=%s">%s</a></li>' % (self.model,i, i)
            else:
                tmpStr='<li><a href="%s?nid=%s">%s</a></li>'%(self.model,i,i)
            tmpList.append(tmpStr)
        if self.current_page==self.page_num:
            prev = '<li><a href="#" aria-label = "Next"><span aria-hidden = "true">下一页</span></a></li>'
        else:
            prev='<li><a href="%s?nid=%s" aria-label="Next"><span aria-hidden = "true">下一页</span></a></li>'%(self.model,self.current_page+1)
        tmpList.append(prev)
        return ''.join((tmpList))

html部分

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap01/css/bootstrap.min.css">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
    <style>
        body {
            padding-top: 70px;
        }
    </style>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
                    aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="http://www.loushanyun.com/"><img src="/static/logo1.png" style="display:block;position: absolute;top: 5px;left: 0"><div class="pull-left" style="margin-left: 40px">娄山云技术论坛</div></a>
        </div>
        <div id="navbar" class="navbar-collapse collapse pull-left">
            <ul class="nav navbar-nav navbar-right">
                {% if type_id %}
                    <li><a href="/">全部</a></li>
                {% else %}
                    <li class="active"><a href="/">全部</a></li>
                {% endif %}
                {% for item in type_list %}
                    {% if item.0 == type_id %}
                        <li class="active"><a href="/all/{{ item.0 }}">{{ item.1 }}</a></li>
                    {% else %}
                        <li><a href="/all/{{ item.0 }}">{{ item.1 }}</a></li>
                    {% endif %}
                {% endfor %}
            </ul>
        </div>
        <div id="navbar" class="navbar-collapse collapse pull-right">
            <ul class="nav navbar-nav navbar-right">
                <li><a class="navbar-brand" href="#"><img alt="Brand" width="20" height="20" src="/static/2.ico"></a>
                </li>
                <li><a href="#">name</a></li>
                <li><a href="#">管理</a></li>
                <li><a href="#">退出</a></li>
            </ul>
        </div>
    </div>
</nav>
<form method="post" action="/index/?nid={{ id }}"></form>
<div>
    {% for item in obj %}
    <div style="width: 60%;height: 200px;margin-left: 55px">
            <div class="post_item">
                <div class="digg">
                    <div class="clear"></div>
                    <div id="digg_tip_9768795" class="digg_tip"></div>
                </div>
                <div class="post_item_body">
                    <h3><a class="titlelnk" href="https://www.cnblogs.com/LearnAndGet/p/9768795.html" target="_blank">{{ item.title }}</a>
                    </h3>
                    <p class="post_item_summary">
                        <a href="https://www.cnblogs.com/LearnAndGet/" target="_blank" class="pull-left"><img width="50" height="55" class="pfs" src={{ item.blog.user.avatar }} alt="error"></a>
                        <div>
                        1.悲观锁和乐观锁的基本概念
                        悲观锁: 乐观锁: 2.乐观锁的一种实现方式:CAS
                        因为乐观锁的思想是:在通常情况下都认为不会产生并发冲突,因此在对数据进行提交更新的时候,会对将要提交更新的数据进行并发冲突检测、如果冲突存在,则会返回错误信息给用户,让用户决定处理方式。
                        基于乐观锁的思想,我们可以知在通常情况下都认为不会产生并发冲突观锁的思想是:在通常情况下都认为不会产生并发冲突,
                        </div>
                    </p>
                    <div class="post_item_foot">
                        <a href="#" class="lightblue">{{ item.blog.user.nickname }}</a>
                       发布于{{ item.create_time }}
                        <span class="article_comment"><a href="https://www.cnblogs.com/LearnAndGet/p/9768795.html#commentform" title="" class="gray">评论({{ item.comment_count }})</a></span>
                        &nbsp;
                        <span class="article_view"><a href="https://www.cnblogs.com/LearnAndGet/p/9768795.html" class="gray">阅读({{ item.read_count }})</a></span>
                        &nbsp;
                        <span class="article_view"><a href="https://www.cnblogs.com/LearnAndGet/p/9768795.html" class="gray"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i>{{ item.up_count }}</a></span>
                        &nbsp;&nbsp;
                        <span class="article_view"><a href="https://www.cnblogs.com/LearnAndGet/p/9768795.html" class="gray"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i>{{ item.down_count }}</a></span>
                    </div>
                </div>
                <div class="clear"></div>
            </div>
            </div>
        {% endfor %}
</div>
<nav aria-label="Page navigation" class="text-center">
      <ul class="pagination">
          {{ PageInfo.run|safe }}
      </ul>
</nav>
<script src="/static/jquery-3.3.1.js"></script>
<script src="/static/bootstrap01/js/bootstrap.min.js"></script>
</body>
</html>

验证码 刷新

<img src="/get_check/" style="display: block" class="pull-right myimg" οnclick="this.src='/get_check/?d='+Math.random();">
发布了20 篇原创文章 · 获赞 0 · 访问量 3809

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/83075810
今日推荐