接外包,有相关需求的可以联系我:Telegram | Email

Django自定义admin管理页面

该文章创建(更新)于05/27/2022,请注意文章的时效性!

自定义管理页面

  • 属性说明
    • 列表页属性
      • list_display 显示字段
      • list_filter 过滤字段
      • search_fields 查找字段
      • list_per_page 分页(每页几条)
    • 添加、修改页属性
      • fields 修改属性先后顺序
      • fieldsets 给属性分组
      • 注意:fieldsfieldsets不能同时使用
  • 关联对象
    • 需求: 在创建班级时,可以直接添加几个学生。
# 在创建班级时,可以直接添加2个学生。  
class StudentsInfo(admin.TabularInline):  
    # 也可以继承StackdInline,竖排显示。  
    # class StudentsInfo(admin.StackedInline)  
    model = Students  
    extra = 2  

class GradesAdmin(admin.ModelAdmin):  
    # 加两行  
    inlines = [StudentsInfo]
  • 执行动作位置

  • test case

class StudentAdmin(admin.ModelAdmin):  
    # 替换列表显示属性  
    def gender(self):  
        if self.sgender:  
            return "男"  
        else:  
            return "女"  

    # 设置列表列属性名称  
    gender.short_description = "性别"  

    # 列表页属性  
    list_display = ['pk', 'sname', 'sage',gender, 'scontend', 'isDelete', 'sgrade']  
    list_filter = ['sname']  
    search_fields = ['sname']  
    list_per_page = 2  

    # 添加、修改页属性  
    fieldsets = [  
        ("num", {"fields": ['sage']}),  
        ("base", {"fields": ['sname', 'scontend', 'isDelete', 'sgrade']}),  
    ]  

admin.site.register(Students, StudentAdmin)

使用装饰器完成注册

# 装饰器注册  
@admin.register(Students)  
class StudentAdmin(admin.ModelAdmin):  
    # 替换列表显示属性  
    def gender(self):  
        if self.sgender:  
            return "男"          else:  
            return "女"
    ...

视图的基本使用

概述

  • Django中,视图对Web请求进行回应
  • 视图就是一个函数,在views.py中进行定义

定义视图

from django.http import HttpResponse    
def index(request):  
    return HttpResponse("Hello, world. You're at the myApp index.")

配置URL

  • 修改Project目录下的urls.py文件
from django.conf.urls import url,include  
from django.contrib import admin  

urlpatterns = [  
    path('admin/', admin.site.urls),  
    url(r'^', include('myApp.urls')),  
]
  • 应用创建一个urls.py文件
from django.conf.urls import url

from . import views

urlpatterns = [  
    url(r'^$', views.index, name='index'),  
]

模板的基本使用

概述

  • 模板是HTML页面,可以根据视图中传递过来的数据进行填充

创建模板目录

  • 在创建一个templates,一般放到和应用的同级目录,也可以放到应用下的统计目录

设置模板路径

# settings.py
TEMPLATES = [  
    {  
        'BACKEND': 'django.template.backends.django.DjangoTemplates',  
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 主要是这里
        'APP_DIRS': True,  
        'OPTIONS': {  
            'context_processors': [  
                'django.template.context_processors.debug',  
                'django.template.context_processors.request',  
                'django.contrib.auth.context_processors.auth',  
                'django.contrib.messages.context_processors.messages',  
            ],  
        },  
    },  
]

在templates路径下创建html文件

模板语法

  • grammer1

{{输出值,可以是变量,一个是对象.属性}}

  • grammer2

{%执行代码段%}

  • test case
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>班级信息</title>  
</head>  
<body>  
    <h1>班级信息列表</h1>  

    <ul>        
        {%for grade in grades%}  
        <li>  
            <a href="#">{{grade.gname}}</a>  
        </li>        
        {%endfor%}  
    </ul>  
</body>  
</html>

配置url

from . import views  

urlpatterns = [  
    url(r'^$', views.index, name='index'),  
    url(r'^(\d+)/(\d+)$', views.detail, name='detail'), # () is a group,给视图传参了  
    url(r'^grades/$', views.grades, name='grades'),  
]

配置views

def grades(request):  
    # get data  
    gradesList = Grades.objects.all()  

    # send data to templates  
    # 将数据传递给模板,模板在渲染页面,模板将渲染好的页面返回给浏览器  
    return render(request, 'myApp/grades.html', {'grades': gradesList})


👇 Share | 分享 👇


要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2022/05/27/django-custom-admin-admin-page/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



微信公众号

👉 NewsLetter ❤️ 邮箱订阅 👈

优惠码