django项目中的ajax分页和条件查询。

1,路由

#主页面路由
re_path(‘article/article_list/‘, article.article_list,name=‘article/article_list/‘),
#分页面路由
re_path(‘article/list_part/‘, article.list_part,name=‘article/list_part/‘),

2,前端主页面html

#引用的js
<script src="/static/jQuery-1.8.2.min.js"></script>

#查询表单
<form id="searchlist">
    {% csrf_token %}
    <ul class="seachform">

        <li><label>标题</label><input name="article_title" type="text" class="scinput"/></li>
        <li><label>是否推荐</label>
            <div class="vocation">
                <select class="select3" name="article_is_recommend">
                    <option value="">请选择</option>
                    <option value="1">推荐</option>
                    <option value="0">不推荐</option>
                </select>
            </div>
        </li>
        <li><label>是否审核</label>
            <div class="vocation">
                <select class="select3" name="article_auditor">
                    <option value="">请选择</option>
                    <option value="1">未审核</option>
                    <option value="0">审核通过</option>
                </select>
            </div>
        </li>

        <li><label>作者</label>
            <div class="vocation">
                <select class="select3" name="member_id">
                    <option value="">请选择</option>
                    {% for v in member_list %}

                    <option value="{{ v.member_id }}">{{ v.member_name }}</option>
                    {% endfor %}
                </select>
            </div>
        </li>

        <li><label>&nbsp;</label><input name="" type="button" class="scbtn" value="查询" id="search"/></li>
        <li><label>&nbsp;</label><input type="button" value="删除所选文章" id="del_list" class="scbtn"></li>

    </ul>

</form>

#文章表
<form onsubmit="return false" id="del">
    <table class="tablelist">
        <thead>
        <tr>
            <th><input name="checkall" type="checkbox" value="" id="checkAll">全选</th>
            <th>文章序号<i class="sort"><img src="/static/back/images/px.gif"/></i></th>
            <th>文章标题</th>
            {#
            <th>文章简介</th>
            #}
            <th>添加时间</th>
            <th>阅读量</th>
            <th>点赞量</th>
            <th>是否推荐</th>
            <th>作者</th>

            <th>是否审核</th>
            <th>操作</th>
        </tr>
        </thead>

        {% csrf_token %}
        <tbody class="maina">

        </tbody>

    </table>

</form>

3,前端主页面js。

<script>
    //首次页面加载,通过ajax拿到数据,放在maina容器里
    show_list();

    function show_list() {
        $.post("{% url ‘back:article/list_part/‘ %}", $(‘#searchlist‘).serialize(), function (data) {
            $(".maina").html(data);
        });
    }

    //点击分页,点击a连接:
    $(document).on(‘click‘, ‘.pagin a‘, function () {
        $.post(this.href, $(‘#searchlist‘).serialize(), function (data) {
            $(".maina").html(data);
        });
        return false;//让a连接失效
    });

    //点击删除
    $(document).on(‘click‘, ‘.del‘, function () {
        _this = this;
        layer.confirm(‘您确定要删除吗?‘, {
            btn: [‘确定‘, ‘取消‘]
        }, function () {
            id = $(_this).parent().data("id");
            $.post("{% url ‘back:article/list_delete/‘ %}", {
                "id": id,
                "csrfmiddlewaretoken": "{{ csrf_token }}"
            }, function (data) {
                if (data.status == 1) {
                    layer.msg(data.info, function () {
                        $(_this).parent().parent().remove();
                    });

                } else {
                    layer.msg(data.info);
                }
            }, ‘json‘);
        }, function () {
        });
        return false;//让a连接失效
    });

    //点击查询按钮
    $(document).on(‘click‘, ‘#search‘, function () {
        show_list();
    });

    {#    设为推荐#
    }
    $(document).on(‘click‘, ‘.recommend‘, function () {
        __this = this;
        layer.confirm(‘特别推荐显示前三篇文章,是否修改数据?‘, {
            btn: [‘确定‘, ‘取消‘]
        }, function () {
            vals = $(__this).data("val");
            $.post("/back/article/article_is_recommend/", {
                "id": vals,
                "csrfmiddlewaretoken": "{{ csrf_token }}"
            }, function (data) {
                if (data.status == 0) {
                    layer.msg(data.info, function () {

                    });

                } else {
                    layer.msg(data.info);
                }
            }, ‘json‘);
        }, function () {
        });
        {#return false;//让a连接失效#}
        }
        );
    {#    审核#
    }
    $(document).on(‘click‘, ‘#go‘, function () {
        layer.msg(‘点击查看文章后返回文章列表确认是否通过审核.‘)
    });
    $(document).on(‘click‘, ‘.auditor‘, function () {
        __this = this;
        layer.confirm(‘是否确认修改文章状态?‘, {
            btn: [‘确定‘, ‘取消‘]
        }, function () {
            valuse = $(__this).data("auditor");
            $.post("/back/article/article_auditor/", {
                "id": valuse,
                "csrfmiddlewaretoken": "{{ csrf_token }}"
            }, function (data) {
                if (data.status == 0) {
                    layer.msg(data.info, function () {

                    });

                } else {
                    layer.msg(data.info);
                }
            }, ‘json‘);
        }, function () {
        });
        {#return false;//让a连接失效#}
        }
        );

    {#    批量删除#
    }
    {#    全选全不选#
    }
    $(document).on(‘click‘, ‘input[name="checkall"]‘, function () {
        $(‘input[name="chk[]"]‘).prop(‘checked‘, $(‘input[name="checkall"]‘).prop(‘checked‘))
    });
    $(document).on(‘click‘, ‘input[name="chk[]"]‘, function () {
        $(‘input[name="checkall"]‘).prop(‘checked‘, !$(‘input[name="chk[]"]:not(:checked)‘).length)
    });
    $(document).on(‘click‘, ‘#del_list‘, function () {
        layer.confirm(‘是否确认删除所选文章?‘, {
            btn: [‘确定‘, ‘取消‘]
        }, function () {
            $.post(‘/back/article/article_del/‘, $(‘#del‘).serialize(), function (data) {
                if (data[‘status‘] == 0) {
                    layer.msg(data[‘info‘])
                } else {
                    layer.msg(data[‘info‘])
                }
            }, ‘json‘)
        })
    })
</script>

4,主页面后台方法。

# 文章列表
def article_list(request):
    member_list = Member.objects.all()
    return render(request,‘article/article_list.html‘,locals())

5,前端分页面html。

{% for v in articles_list %}
    <tr>
        <td><input name="chk[]" type="checkbox" value="{{ v.article_id }}"></td>
        <td>{{ forloop.counter }}</td><!--编号-->
        <td>{{ v.article_title }}</td>
        <td>{{ v.article_addtime }}</td>
        <td>{{ v.article_clicknum }}</td>
        <td>{{ v.article_praise_num }}</td>
        <td>
            {% if v.article_is_recommend == 1 %}
                推荐&nbsp;&nbsp;
                <a href="javascript:;" data-val="{{ v.article_id }}" style="color: #440044;" class="recommend">
                    >>设为不推荐</a>
            {% else %}
                不推荐&nbsp;&nbsp;
                <a href="javascript:;" data-val="{{ v.article_id }}" style="color: #440044;" class="recommend">
                    >>设为推荐</a>
            {% endif %}
        </td>
        <td>{{ v.member.member_name }}</td>
        <td>
            {% if not v.article_auditor %}
                审核通过
                &nbsp;&nbsp;&nbsp;&nbsp;
                <a href="javascript:;" style="color: purple;" data-auditor="{{ v.article_id }}" class="auditor">
                    >>屏蔽此文章</a>
            {% else %}
                <a href="javascript:;" style="color: #0b2e13;" id="go">去审核</a>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <a href="javascript:;" style="color: purple;" data-auditor="{{ v.article_id }}" class="auditor">
                    >>通过审核</a>
            {% endif %}
        </td>
        <td data-id="{{ v.article_id }}"><a href="/blog/single-post/{{ v.article_id }}/" class="tablelink">查看</a> <a
                href="javascript:;" class="tablelink del"> 删除</a></td>
    </tr>
{% endfor %}
<tr>
    <td colspan="10">
        <div class="pagin">
            <div class="message">共<i class="blue">{{ num }}</i>条记录,当前显示第&nbsp;<i
                    class="blue">{{ currentPage }}&nbsp;</i>页
            </div>
            <ul class="paginList">
                {% if articles_list.has_previous %}
                    <li class="paginItem"><a
                            href="/back/article/list_part/?page={{ articles_list.previous_page_number }}"><span
                            class="pagepre"></span></a></li>
                {% endif %}
                {% for num in pageRange %}
                    <li class="paginItem {% if num == currentPage %}current{% endif %}"><a
                            href="/back/article/list_part/?page={{ num }}">{{ num }}</a></li>
                {% endfor %}
                {% if articles_list.has_next %}
                    <li class="paginItem"><a
                            href="/back/article/list_part/?page={{ articles_list.next_page_number }}"><span
                            class="pagenxt"></span></a></li>
                {% endif %}
            </ul>
        </div>
        </div>

    </td>

</tr>

6,分页面后台方法。

#用到的封装查找函数
from blog.utils import function
# 文章part
def list_part(request):
    where=function.getWhere(request)
    articles_list=Article.objects.filter(**where).all().order_by(‘-article_id‘)
    num=len(articles_list)
    currentPage=int(request.GET.get(‘page‘,1)) #获取当前在第几页
    paginator=Paginator(articles_list,10)

    if paginator.num_pages>11:
        if currentPage-5<1:
            pageRange=range(1,11)
        elif currentPage+5>paginator.num_pages:
            pageRange = range(currentPage-5, paginator.num_pages+1)
        else:
            pageRange = range(currentPage - 5,currentPage+5)
    else:
        pageRange = range(1,paginator.num_pages+1)

    try:
        articles_list=paginator.page(currentPage)
    except PageNotAnInteger:
        articles_list = paginator.page(1)
    except EmptyPage:
        articles_list = paginator.page(paginator.num_pages)
    return render(request,‘article/article_list_part.html‘,locals())

7,分页面中用到的封装函数

# 文章查找
def getWhere(request):
    where = dict()
    article_title=request.POST.get(‘article_title‘,‘‘)
    article_is_recommend = request.POST.get(‘article_is_recommend‘, ‘‘)
    member_id = request.POST.get(‘member_id‘, ‘‘)
    article_auditor = request.POST.get(‘article_auditor‘,‘‘)
    if article_title:
        where[‘article_title__icontains‘]=article_title
    if article_is_recommend!=‘‘:
        where[‘article_is_recommend‘] = article_is_recommend
    if member_id:
        where[‘member‘] = member_id
    if article_auditor !=‘‘:
        where[‘article_auditor‘] = article_auditor
    print(where)
    return where

8,页面效果。

done。

原文地址:https://www.cnblogs.com/nmsghgnv/p/11445807.html

时间: 2024-11-02 12:06:09

django项目中的ajax分页和条件查询。的相关文章

项目中关于ajax jsonp的使用

项目中关于ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法总算搞定了,记录一下 function TestAjax() {    $.ajax({        type : "get",        async : false,        url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10   

ASP.NET中实现Ajax分页

在页面中指定一个div容器来接收动态生成的分页数据: 1 <div id="div_menu"> 2 </div> 使用jQuery来请求并处理Json格式数据: 1 //定义页码与页容量 2 var pageIndex = 1; 3 var pageSize = 15; 4 var pageCount = 0; 5 var recordCount = 0; 6 AjaxGetData(pageIndex, pageSize); 7 //Ajax获取数据 8 f

Django项目中使用Redis

Django项目中使用Redis DjangoRedis 1 redis Redis 是一个 key-value 存储系统,常用于缓存的存储.django-redis 基于 BSD 许可, 是一个使 Django 支持 Redis cache/session 后端的全功能组件. 1.1 为何要用 django-redis ? 持续更新 本地化的 redis-py URL 符号连接字符串 可扩展客户端 可扩展解析器 可扩展序列器 默认客户端主/从支持 完善的测试 已在一些项目的生产环境中作为 ca

django项目中遇到要实现定时任务

django项目中遇到要实现定时任务,所以选用了简单易用的django-crontab插件. 1.安装 django-crontab pip install django-crontab 2.定时要执行的脚本 先写个简单的测试脚本. ipoms/crons.py import datetime def update_stock_status(): start_time = datetime.datetime.now() print start_time, ", begin update_stoc

jdbc案例_分页_条件查询

客户信息增删改查系统 软件工程开发流程:1.瀑布模型 2.螺旋模型 RUP (Rational Unified Process,统一软件开发过程 ) 采用瀑布模型: 需求 --- 需求分析 --- 系统设计(概要.详细设计)---- 编码 --- 测试 --- 实施 --- 维护 * 瀑布模型 缺陷在编码结束之前,客户看不到最终软件产品 ,如果需求.设计出现明显错漏,导致软件后期无法维护,存在重大缺陷 * 瀑布模型对于 新型软件,需求不定软件 风险较大 敏捷开发理念:迭代开发模式 ,将系统功能分

thinkphp中的ajax分页

thinkphp中用ajax分页和普通的ajax分页的区别在于处理位置的不同,thinkphp是在控制器的方法中处理ajax传的值,然后返回数据.下面是一个点击事件触发后,显示的内容用ajax分页. 下面的示例是同一个类别下,根据点击不同的分类显示出点击的分类的数据. 需要修改的地方用黄色背景标示. 1.ajax处理页面 $(".php_list").click(function(){//点击事件,可以根据自己的要求修改.也可以放在$(document).ready(function(

异步任务利器Celery(二)在django项目中使用Celery

Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py 首先建立proj/proj/celery.py文件: from __future__ import absolute_import, unicode_literals import os from celery import Cele

在Django项目中使用富文本编辑器

1 开发要点 现在网上有很多的富文本编辑器,包括Markdown.tinymce.UEditor.KindEditor.ckeditor等等.在项目中使用这些编辑器主要有以下几个问题: 编辑页面 在HTML页面渲染编辑器: 定制编辑器的功能,比如有哪些文本样式.图片上传.代码插入: 定制编辑器的样式,指的是编辑器整体的样式,比如高度.宽度.显示位置等等: 预览内容: 获取内容: 显示页面 显示内容: 2 Django APP 下表列出一些常用的APP,它们都可以在GitHub上找的到,链接见下文

django项目中使用FastDFS

FastDFS客户端与自定义文件存储系统 1. FastDFS的Python客户端 python版本的FastDFS客户端使用说明参考https://github.com/jefforeilly/fdfs_client-py 安装 安装提供给大家的fdfs_client-py-master.zip到虚拟环境中 pip install fdfs_client-py-master.zippip install mutagenpip isntall requests 使用 使用FastDFS客户端,需