django+angular分页功能+搜索功能

此方法是前端分页

主要思路:
  • 把所有数据通过ajax将数据取出,并进行处理和展示.
遇到的问题:
  • angular和django的语法冲突,在template中变量的标注方法都是 {{ 变量 }},导致angular在调用$scope时,无法渲染.变量被django渲染.下方代码通过修改angular标注方式,解决标签冲突问题.[[ ]] <=== 用这个标签来定义angular的变量

废话不多说.先上样图

image.png

所搜功能图

image.png

代码如下:


{% extends "base.html" %}
{% load staticfiles %}
{% block head_script %}

    <script src="http://www.jq22.com/jquery/angular-1.4.6.js"></script>
    <script type="text/javascript" src="{% static 'js/ui-bootstrap-tpls.min.js' %}"></script>


    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">


    <style>
        .panel{width:60%;margin:0 auto;text-align: center;}
        .form-inline{width:60%;margin:0 auto;}
    </style>

{% endblock %}

{% block body_label %}
<body class=" theme-blue" ng-app="app" ng-controller="ctrl" >
{% endblock %}

{% block breadcrumb %}
           <h1 class="page-title">Users</h1>
                    <ul class="breadcrumb">
            <li><a href="index.html">Home</a> </li>
            <li class="active">Users</li>
        </ul>
{% endblock %}



{% block main_content %}


    <div class="main-content">


{#    <button class="btn btn-default">Import</button>#}
{#    <button class="btn btn-default">Export</button>#}
  <div class="btn-group">
  </div>


    <div class="row form-inline req">
{#      <div class="req  col-lg-2 form-inline">#}
        <div class="col-lg-2">
            <div class="btn-toolbar list-toolbar">
                <button class="btn btn-primary"><i class="fa fa-plus"></i>创建用户</button>
            </div>
        </div>

        <div class="col-lg-4">
            <div class="input-group">
                <input type="text" class="form-control" placeholder="搜索客户邮箱..."  id="search" ng-focus="concentrate()" >
                <span class="input-group-btn">
                    <button class="btn btn-default" type="button" ng-click="search()">搜索</button>
                </span>
            </div>
        </div>
            <div class="col-lg-4  col-lg-offset-1 solid_top form-group">
                <div class="">
                    <label>展示条数:
                        <select  class="form-control" ng-change="change(selectedLimit)" ng-model="selectedLimit" ng-options="value.limit for value in values"></select>
                    </label>
                </div>
            </div>
        </div>
        <table class="table table-hover" >
            <thead>
                <tr>
                    <th>序号</th>
                    <th>客户邮箱</th>
                    <th>邮件类型</th>
                    <th>使用规则</th>
                    <th style="width: 3.5em;"></th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="data in datas">
                    <td>[[data.order]]</td>
                    <td>[[data.module]]</td>
                    <td>[[data.message]]</td>
                    <td>[[data.time]]</td>
                    <td>
                        <a href="user.html"><i class="fa fa-pencil"></i></a>
                        <a href="#myModal" role="button" data-toggle="modal"><i class="fa fa-trash-o"></i></a>
                     </td>
                </tr>
            </tbody>
        </table>
    </div>
    <div class="row form-inline" >
        <div class="col-lg-8">
            <uib-pagination
                total-items="page.totalCount"
                ng-model="page.pageNo"
                max-size="5"
                class="samplePage pagination"
                boundary-links="true"
                force-ellipses="false"
                first-text="首页"
                last-text="末页"
                previous-text="上一页"
                next-text="下一页"
                items-per-page="page.limit"
                ng-change="pageChanged()"
                boundary-link-numbers="true"
                >
          </uib-pagination>
        </div>
        <div class="col-md-4">
            <input type="text" class="form-control" style="width:100px;margin:25px 0" name="" ng-model="go" />
            <a class="btn btn-primary btn-sm" ng-click="setPage(go)">跳转</a>
        </div>
    </div>
    <script type="text/javascript">
        var pageApp = angular.module("app",['ui.bootstrap']);
        pageApp.config(function ($interpolateProvider) {
            $interpolateProvider.startSymbol('[[');
            $interpolateProvider.endSymbol(']]');
        });
        pageApp.controller("ctrl", function ($scope, $http,$filter) {
            $http({
                method: 'GET',
                url: 'test.html'
            }).success(function (response) {
                //总条数
                $scope.total = response.total;
                //反转函数转化abcd转dcba
                $scope.data = response.data.reverse();
                //选择显示的条数
                $scope.values = [{"limit": 3}, {"limit": 4}, {"limit": 5}, {"limit": 6}, {"limit": 7}, {"limit": 8}];
                //默认显示的条数
                $scope.selectedLimit = $scope.values[0];
                //默认显示当前页数
                $scope.currentPage = 1;
                if ($scope.data != null) {
                    $scope.datas = $scope.data.slice($scope.selectedLimit.limit * ($scope.currentPage - 1), $scope.selectedLimit.limit * $scope.currentPage);
                } else {
                    alert($scope.data);
                }
                $scope.page = {
                    "limit": $scope.selectedLimit.limit,
                    "pageSize": 5,
                    "pageNo": $scope.currentPage,
                    "totalCount": $scope.total
                };
            })
            $scope.change = function (selectedLimit) {
                $scope.page.limit = selectedLimit.limit;
                $scope.datas = $scope.data.slice($scope.selectedLimit.limit * ($scope.page.pageNo - 1), $scope.selectedLimit.limit * $scope.page.pageNo);
            }
            $scope.pageChanged = function () {
                $scope.page.limit = $scope.selectedLimit.limit;
                $scope.datas = $scope.data.slice($scope.selectedLimit.limit * ($scope.page.pageNo - 1), $scope.selectedLimit.limit * $scope.page.pageNo);
            }
            $scope.setPage = function (go) {
                $scope.length = Math.ceil($scope.total / $scope.selectedLimit.limit);
                console.log($scope.length);
                if (go > $scope.length) {
                    $scope.page.pageNo = $scope.length;
                    console.log($scope.length);

                } else {
                    $scope.page.pageNo = go;
                }
                $scope.datas = $scope.data.slice($scope.selectedLimit.limit * ($scope.page.pageNo - 1), $scope.selectedLimit.limit * $scope.page.pageNo);
            };
            $scope.concentrate = function () {
                $scope.datas = $scope.data.slice($scope.selectedLimit.limit * ($scope.page.pageNo - 1), $scope.selectedLimit.limit * $scope.page.pageNo);
            };
            $scope.search = function () {
                $scope.datas = $scope.data
                $scope.datas = $filter("filter")($scope.datas, document.getElementById("search").value);
            };
        });
    </script>

{% endblock %}

数据模型:test.html中的内容

{
    "total":10,
    "data":[{
          "order":10,"module":"模块10",
          "message":"信息10",
          "time":"2016-07-02"
        },
        {
          "order":9,"module":"模块9",
          "message":"信息9",
          "time":"2016-07-02"
        },{
          "order":8,"module":"模块8",
          "message":"信息8",
          "time":"2016-07-02"
        },
        {
          "order":7,"module":"模块7",
          "message":"信息7",
          "time":"2016-07-02"
        },{
          "order":6,"module":"模块6",
          "message":"信息6",
          "time":"2016-07-02"
        },
        {
          "order":5,"module":"模块5",
          "message":"信息5",
          "time":"2016-07-02"
        },{
          "order":4,"module":"模块4",
          "message":"信息4",
          "time":"2016-07-02"
        },
        {
          "order":3,"module":"模块3",
          "message":"信息3",
          "time":"2016-07-02"
        },{
          "order":2,"module":"模块2",
          "message":"信息2",
          "time":"2016-07-02"
        },
        {
          "order":1,"module":"模块1",
          "message":"信息1",
          "time":"2016-07-02"
        }]
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容