四十四、python学习之Django框架(三):Admin站点, 调整列表页展示, 重写模板

一、Admin站点:

1. 使用Admin站点:

使用Django的管理模块,需要按照如下步骤操作:

  • 管理界面本地化
  • 创建管理员
  • 注册模型类
  • 自定义管理页面

1.1管理界面本地化:

在settings.py中设置语言和时区:

LANGUAGE_CODE = 'zh-hans' # 使用中国语言
TIME_ZONE = 'Asia/Shanghai' # 使用中国上海时间

1.2 创建超级管理员:

创建管理员的命令如下,按提示输入用户名、邮箱、密码。

python manage.py createsuperuser

在这里插入图片描述
打开浏览器,在地址栏中输入如下地址后回车。

http://127.0.0.1:8000/admin/

输入前面创建的用户名、密码完成登录。
在这里插入图片描述

登录成功后界面如下,但是并没有我们自己应用模型的入口,接下来进行第三步操作。
在这里插入图片描述

1.3 注册模型类:

登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。

打开booktest/admin.py文件,编写如下代码:

from django.contrib import admin
from booktest.models import BookInfo,HeroInfo

admin.site.register(BookInfo)
admin.site.register(HeroInfo)

到浏览器中刷新页面,可以看到模型类BookInfo和HeroInfo的管理了。
在这里插入图片描述
点击类名称"BookInfo"可以进入列表页,默认只有一列。
在这里插入图片描述
在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。
在这里插入图片描述
在列表页中点击某行的第一列可以进入修改页。
在这里插入图片描述
按照提示进行内容的修改,修改成功后进入列表页。在修改页点击“删除”可以删除一项。
在这里插入图片描述
删除:在列表页勾选想要删除的复选框,可以删除多项。
在这里插入图片描述
点击执行后进入确认页面,删除后回来列表页面。
在这里插入图片描述
数据都删除了,接下来手动造一些数据出来。

1.4 4 定义与使用Admin管理类:

Django提供的Admin站点的展示效果可以通过自定义ModelAdmin类来进行控制。

定义管理类需要继承自admin.ModelAdmin类,如下

from django.contrib import admin

class BookInfoAdmin(admin.ModelAdmin):
    pass

使用管理类有两种方式:

  • 注册参数
  admin.site.register(BookInfo,BookInfoAdmin)
  • 装饰器
  @admin.register(BookInfo)
  class BookInfoAdmin(admin.ModelAdmin):
      pass

二、调整列表页展示:

1. 页大小:

每页中显示多少条数据,默认为每页显示100条数据,属性如下:

list_per_page=100
  • 1)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10
  • 2)在浏览器中查看区域信息的列表页面,效果如下图:
    在这里插入图片描述

2. 操作选项"的位置:***

顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True。

actions_on_top=True

底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False。

actions_on_bottom=False
  • 1)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    actions_on_top = True
    actions_on_bottom = True
  • 2)在浏览器中刷新效果如下图:
    在这里插入图片描述

3. 将方法作为列

列可以是模型字段,还可以是模型方法,要求方法有返回值。

  • 1)打开booktest/models.py文件,修改AreaInfo类如下:
class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle
  • 2)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title']
  • 3)在浏览器中刷新效果如下图:
    在这里插入图片描述
    方法列是不能排序的,如果需要排序需要为方法指定排序依据。

admin_order_field=模型类字段

  • 1)打开booktest/models.py文件,修改AreaInfo类如下:
class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle
    title.admin_order_field='atitle'
  • 2)在浏览器中刷新效果如下图:
    在这里插入图片描述
    列标题
    列标题默认为属性或方法的名称,可以通过属性设置。需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用这个属性。

short_description=‘列标题’

  • 1)打开booktest/models.py文件,修改AreaInfo类如下:
class AreaInfo(models.Model):
    ...
    title.short_description='区域名称'
  • 2)在浏览器中刷新效果如下图:

  • 在这里插入图片描述
    *** 关联对象***
    无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员。

  • 1)打开booktest/models.py文件,修改AreaInfo类如下:

class AreaInfo(models.Model):
    ...
    def parent(self):
        if self.aParent is None:
          return ''
        return self.aParent.atitle
    parent.short_description='父级区域名称'
  • 2)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title','parent']
  • 3)在浏览器中刷新效果如下图:
    在这里插入图片描述

搜索框
属性如下,用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。

search_fields=[]
  • 1)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    search_fields=['atitle']
  • 2)在浏览器中刷新效果如下图:在这里插入图片描述
    中文标题
  • 1)打开booktest/models.py文件,修改模型类,为属性指定verbose_name参数,即第一个参数。
class AreaInfo(models.Model):
    atitle=models.CharField('标题',max_length=30)#名称
    ...
  • 2)在浏览器中刷新效果如下图:在这里插入图片描述

三、调整编辑页展示

1.显示字段顺序

属性如下:

fields=[]
  • 1)点击某行ID的链接,可以转到修改页面,默认效果如下图:
    在这里插入图片描述

  • 2)打开booktest/admin.py文件,修改AreaAdmin类如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    fields=['aParent','atitle']
  • 3)刷新浏览器效果如下图:在这里插入图片描述
    在下拉列表中输出的是对象的名称,可以在模型类中定义str方法用于对象转换字符串。

  • 1)打开booktest/models.py文件,修改AreaInfo类,添加str方法。

class AreaInfo(models.Model):
    ...
    def __str__(self):
        return self.atitle
  • 2)刷新浏览器效果如下图:
    在这里插入图片描述

2.分组显示

属性如下:

fieldset=(
    ('组1标题',{'fields':('字段1','字段2')}),
    ('组2标题',{'fields':('字段3','字段4')}),
)
  • 1)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    # fields=['aParent','atitle']
    fieldsets = (
        ('基本', {'fields': ['atitle']}),
        ('高级', {'fields': ['aParent']})
    )

2)刷新浏览器效果如下图:
在这里插入图片描述

说明:fields与fieldsets两者选一使用。

3.关联对象

在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类StackedInline:以块的形式嵌入。

  • 1)打开booktest/admin.py文件,创建AreaStackedInline类。
class AreaStackedInline(admin.StackedInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象
  • 2)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

3)刷新浏览器效果如下图:
在这里插入图片描述

可以用表格的形式嵌入。

  • 1)打开booktest/admin.py文件,创建AreaTabularInline类。
class AreaTabularInline(admin.TabularInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象
  • 2)打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]

3)刷新浏览器效果如下图:
在这里插入图片描述

四、重写模板:

  • 1)在templates/目录下创建admin目录,结构如下图:
    在这里插入图片描述
  • 2)打开当前虚拟环境中Django的目录,再向下找到admin的模板,目录如下:
/home/python/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
  • 3)将需要更改文件拷贝到第一步建好的目录里,此处以base_site.html为例。
    在这里插入图片描述

编辑base_site.html文件:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<hr>
<h1>自定义的管理页模板</h1>
<hr>
{% endblock %}

{% block nav-global %}{% endblock %}
  • 4)在浏览器中转到列表页面,刷新后如下图:
  • 在这里插入图片描述
    其它后台的模板可以按照相同的方式进行修改。
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅弋、璃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值