te/$ -> self.delete_view
^change/$ -> self.dchange_view
]
- StarkSite
是一个容器,用于放置处理请求对应关系。
{
model.UserInfo: UserInfoConfig(model.UserInfo,self),
model.UserType: StarkConfig(model.UserType,self),
}
具体来写:当然前面的StarkSite类已经写过了,那我们来看看StarkConfig这个类
以下的功能实现都是在StarkConfig这个类里面的
功能实现一:展示页面,让页面上动态显示表格
class StarkConfig(object):
list_display = []
def __init__(self, model_class, site):
self.model_class = model_class
self.site = site
def change_list_views(self,request,*args,**kwargs):
data_list = self.model_class.objects.all()
'''展示th的信息'''
head_list = []
for field_name in self.list_display:
if isinstance(field_name,str):
verbose_name = self.model_class._meta.get_field(field_name).verbose_name
else:
verbose_name = field_name(self,is_header=True)
# yield {"verbose_name":verbose_name}
head_list.append(verbose_name)
'''展示td的信息'''
# [["id","name"],["id","name"],["id","name"],]
new_data_list = []
for row in data_list:
temp = []
for field_name in self.list_display:
if isinstance(field_name,str):
#如果是字符串类型的就是用getattr的方式,因为对象不能.字符串
val = getattr(row,field_name)
else:
val = field_name(self,row)
temp.append(val)
# yield {"val":val}
new_data_list.append(temp)
return render(request, "stark/change_list_views.html", {"data_list":new_data_list,"head_list":head_list})
在stark.py 中
strak.py
print("sssss6666666")
from app01 import models
from stark.service import v1
from django.utils.safestring import mark_safe
class UserInfoConfig(v1.StarkConfig):
def checkbox(self,obj=None,is_header=False):
if is_header:
return "选择"
return mark_safe("<input type='checkbox' name='zzzz' value='%s'/>"%obj.id)
def edit(self,obj=None,is_header=False):
if is_header:
return "操作"
return mark_safe("<a href='edit/%s'>编辑</a>"%obj.id)
list_display = [checkbox,"id","name",edit]
v1.site.register(models.UserInfo,UserInfoConfig)
v1.site.register(models.Role,UserInfoConfig)
v1.site.register(models.UserType)
功能二:当然我们现在把按钮是自己定制的,有与编辑,删除等都是我们很常用的,所以我们可以搞成默认的。在StarkConfig类里写
# ===============吧删除,编辑,复选框设置默认按钮==================
def checkbox(self,obj=None,is_header=False):
if is_header:
return "选择"
return mark_safe("<input type='checkbox' name='zzzz' value='%s'/>"%obj.id)
def edit(self,obj=None,is_header=False):
if is_header:
return "操作"
return mark_safe("<a href='%s'>编辑</a>"%(self.get_change_url(obj.id),))
def delete(self,obj=None,is_header=False):
if is_header:
return "删除"
#动态跳转路径,反向解析,因为每次都要用到,我们可以吧它封装到一个函数
return mark_safe("<a href='%s'>删除</a>"%self.get_delete_url(obj.id))
#做默认的删除和编辑。对这个方法重写的时候可以吧权限管理加进去,
# 当它都什么权限的时候显示什么按钮。
def get_list_display(self):
data = []
if self.list_display:
data.extend(self.list_display) #在新的列表里面吧list_display扩展进来
data.append(StarkConfig.edit) #因为是默认的,直接在类里面去调用edit
data.append(StarkConfig.delete)
data.insert(0,StarkConfig.checkbox)
return data
功能三:默认显示添加按钮