admin ---11.admin , 展示列表 和 分页

一.admin (创建超级用户)

  1.注册:

1.创建一个超级管理员,使用如下命令:

python manage.py createsuperuser

2.输入打算使用的登录名:

username:michaelshu

3.输入email:

Email address:

4.输入密码,需要输入两次,输入过程中密码不显示:

Password:       (既要有数字又要有字母)

Password (again):

当两次密码都相同的时候,就会提示superuser创建成功。

Superuser created successfully

 

  2.修改密码

  ①第一种

python manage.py changepassword 用户名

 

  ②第二种 登录后修改

 

  3.在 admin 中注册 用到的表

 

 

 

  4.补充:

  ①中英文修改,在settings.py文件中修改  LANGUAGE_CODE

    中文: LANGUAGE_CODE = 'zh-hans'

       英文:  LANGUAGE_CODE = 'en-us'

   5.显示和直接编辑

  

 

 

 二.展示列表

   1.普通字段

    对象.字段名

  2. choices

    对象.字段名  -->真实值

    对象.get_字段名_display   -->中文显示值

  3.外键

   ①对象.外键   (定义str)

   ② 对象.外键.name

  4.其他

   定义函数

  def show_class(self):

    return '|' . join([str(i) for i in self.class_list.all()])

  5.示例:

    {% for customer in all_customer %}

        <tr>
            <td>{{ forloop.counter }}</td>    #序号,根据循环次数
            <td>{{ customer.qq }}</td>        #普通字段
            <td>{{ customer.name|default:'未填写' }}</td>
            <td>{{ customer.get_sex_display }}</td>    #choices 字段
            <td>{{ customer.birthday|default:'未填写' }}</td><td>{{ customer.get_source_display }}</td>
            <td>{{ customer.course }}</td>
            <td>
                {{ customer.show_status }}
            </td>
            <td>{{ customer.last_consult_date }}</td>
            <td>{{ customer.consultant }}</td>    #外键字段<td>{{ customer.show_class }}</td>    #自定义函数
        </tr>

    {% endfor %}

 

   6.日期格式化的配置

   在settings.py 文件中进行配置

USE_L10N = False
            
DATE_FORMAT = 'Y-m-d'
DATETIME_FORMAT = 'Y-m-d H:i:s'

 

   7.后端 直接发送 .html 代码(用safe)

    ①后端safe

 

from django.utils.safestring import mark_safe

def show_status(self):
status_color = {
'signed':'green',
'unregistered':'#208c72',
'studying':'yellow',
'paid_in_full':'blue',
}
return mark_safe('<span style="color: white;padding: 2px">{}</span>'
.format(status_color.get(self.status),self.get_status_display()))


 

         ②前端safe

{{ value|safe}}

 

 三.分页(封装成类)

  ①新建放置插件的文件

 

   ②在 pagination.py 文件中的分页插件代码

class Pagination:

    def __init__(self, page_num, all_count, per_num=10, max_show=11):
        # 获取页码
        try:
            self.page_num = int(page_num)
            if self.page_num <= 0:
                self.page_num = 1
        except Exception as e:
            self.page_num = 1

        # 每页显示的数据量
        self.per_num = per_num

        # 总数据量
        all_count = all_count

        # 总页码数
        self.page_count, more = divmod(all_count, per_num)
        if more:
            self.page_count += 1

        # 最大显示页码数
        self.max_show = max_show
        self.half_show = max_show // 2

    @property
    def page_html(self):
        # 总页码数 < 最大显示页码数
        if self.page_count < self.max_show:
            page_start = 1
            page_end = self.page_count
        else:
            # 处理左边极值
            if self.page_num <= self.half_show:
                page_start = 1
                page_end = self.max_show
            elif self.page_num + self.half_show >= self.page_count:
                page_start = self.page_count - self.max_show + 1
                page_end = self.page_count
            else:
                page_start = self.page_num - self.half_show  # 2
                page_end = self.page_num + self.half_show  # 7 + 5  12

        page_list = []
        if self.page_num == 1:
            page_list.append('<li class="disabled"><a>上一页</a></li>')
        else:
            page_list.append('<li><a href="?page={}">上一页</a></li>'.format(self.page_num - 1, ))

        for i in range(page_start, page_end + 1):
            if i == self.page_num:
                page_list.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
            else:
                page_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))

        if self.page_num == self.page_count:
            page_list.append('<li class="disabled"><a>下一页</a></li>')
        else:
            page_list.append('<li><a href="?page={}">下一页</a></li>'.format(self.page_num + 1, ))

        return ''.join(page_list)

    @property
    def start(self):
        """
        切片的起始值
        :return:
        """
        return (self.page_num - 1) * self.per_num

    @property
    def end(self):
        """
        切片的终止值
        :return:
        """
        return self.page_num * self.per_num

 

   ③在 view.py 文件中调用分页插件

from utils.pagination import Pagination
from django.shortcuts import render, redirect, reverse, HttpResponse
from crm import models


# 分页
def user_list(request):
"""
一页显示20

第1页 0 20
第2页 20 40

n (n-1)*20 20*n

:param request:
:return:
"""
page = Pagination(request.GET.get('page', '1'), len(users), )

return render(request, 'user_list.html', {'users': users[page.start:page.end],
'page_html': page.page_html})

 

   ④ 在 .html 文件中

 

{% extends 'layout.html' %}


{% block content %}

    <table class="table table-hover table-bordered">
        {% for user in users %}
            <tr>
                <td>{{ user.name }}</td>
                <td>{{ user.pwd }}</td>
            </tr>
        {% endfor %}


    </table>


    <nav aria-label="Page navigation">
        <ul class="pagination">

{#            {% for page in page_count %}#}
{#                <li><a href="?page={{ page }}">{{ page }}</a></li>#}
{#            {% endfor %}#}
            {{ page_html|safe }}

        </ul>
    </nav>

{% endblock %}

 

posted @ 2019-03-13 22:27  TNTsc  阅读(470)  评论(0编辑  收藏  举报