stark 组件之显示页面的设置
querydict的三个特性>>点我
用户输入地址如下

1在stark项目中的apps中写入一个函数,让项目启动的时候扫描每个app中的stark.py文件

在项目的url.py中引入 自己定义的urls方法,生成url

2.进入用户自己写的实例化的单例对象site的urls方法中去

3.调用get_urls()方法得到他的返回值

4.找到model_config中的这个urls方法得到他的返回值

找到model_config中的urls方法获取返回值

5.根据用户数据的地址 返回响应的视图函数

用户输入的地址会给返回self.show_list的函数

1 new_data_list中的代码分析
1)data_list是从数据库中将所有的数据取出来
2)data_list = self.model.objects.all()
用到的第二个列表的由来 new_list_display=self.new_list_display()
#构建一个含有编辑删除复选框的默认类,并且配合用户自定义的list_display中的内容 def new_list_display(self): new_list_display=[] #将原有的数据放进去 new_list_display.extend(self.list_display) #将编辑方法放进去 当self.list_display_link中的值为空的时候,则走这个
if not self.list_display_links: new_list_display.append(ModelStark.edit) #将删除方法发进去 new_list_display.append(ModelStark.delete) #将选择框放进去 new_list_display.insert(0,ModelStark.checkbox) return new_list_display #形成一个这种的列表[checkbox,'__str__',edit,delete]
new_data_list = [] #先定义一个空的列表 #生成表数据 for obj in data_list: temp = [] for filed in new_list_display:#list_display中的字段,在例表中 #如 ['address','email'],在循环中将每个字段取出来 # if isinstance(filed,str): #先判断这个字段是不是字符串,是的话给加入, #但是'__str__'这种方法也不能识别,不能用 if callable(filed):#该内容是可调用的,函数可调用返回True 判断是否为方法 print('打印方法的名称========',filed.__name__,type(filed.__name__)) if filed.__name__=='edit': #判断这个方法的名称是否是 dite 如果是的话,下边的方法 # if not self.list_display_links: print('执行这个将编辑按钮返回的界面了 ') # val=filed(self,obj)#这里注意,他会调用自己累中的属性和方法不会调用父类的 #所以这个self就是指的是自己先前的 #将此数据对象传给函数,用于写入数据。 val=self.get_link_tags(obj,'编辑') #调用get_link_tags方法,得到按钮<a href=" ">编辑</a> 这样的按钮
#get_link_tagd函数的代码
#获取点击标签的按钮和肩上href的内容 def get_link_tags(self,obj,val): #request这个内容没有给传过来 但是调用这个函数的show_list函数中已经定义了request这个, # 所以可以直接拿过来用 params=self.request.GET #获取请求头中带的信息, # 如 http://127.0.0.1:8000/stark/app01/publish/?a=1&b=2 #获取的信息就是{a:1,b:2}是字典形式的 import copy params=copy.deepcopy(params) #深拷贝params将_mutable属性设置为True params._mutable=True #引入QueryDict from django.http import QueryDict qd = QueryDict(mutable=True) #对他进行设置 qd['list_filter'] =params.urlencode()# urlencode()方法可以将数据{a:1,b:2}保存成a=1&b=2的形式 s=mark_safe('<a href="%s?%s">%s</a>' % (self.get_edit_url(obj),qd.urlencode(),val))# #将 return s
temp.append(val) else: val = filed(self, obj) temp.append(val) else: if filed in self.list_display_links: val = getattr(obj, filed) # 利用反射的原理将对象中的属性值取出来 #用方法将用户写入的数据信息填到标签按钮上,当点击的时候就带上这些内容 val=self.get_link_tags(obj,val) # 调用对象的动态方法get_link_tags
# val=mark_safe('<a href="%s">%s</a>' %(self.get_edit_url(obj),val)) else: val = getattr(obj, filed) # 利用反射的原理将对象中的属性取出来 temp.append(val) new_data_list.append(temp) #经过这个循环将数据放进new_data_list这个列表中 这里边的数据是页面展示的数据
title_list的数据获取
new_list_display=self.new_list_display()
title_list=[] for j in new_list_display: #循环找出这里边的数据 if callable(j): # 用函数名.__name__的方法能取出函数的名字 # 但是取出的数据是英文,所以想显示中文不能用这个 # print('这是函数的名字=======================',j.__name__) # title_list.append(j.__name__) val=j(self,is_heard=True) title_list.append(val) else: if j=='__str__':#判断当标题列表为__str__时,要用这个来让他显示 title_list.append(self.model._meta.model_name.upper()) else: currneobj=self.model._meta.get_field(j) title_list.append(currneobj.verbose_name)
add_url的获取
add_url=self.get_add_url()
get_add_url中的代码

用到的知识点
1:mark_safe
a=mark_safe('<a href="%s?%s">%s</a>' % (self.get_edit_url(obj),qd.urlencode(),val))
直接将a返回给HTML文件得到的就是a标签按钮
2: 反射 getattr
val = getattr(obj, filed) # 利用反射的原理将对象中的属性值取出来
#用方法将用户写入的数据信息填到标签按钮上,当点击的时候就带上这些内容
3: 在HTML页面中
{% for form in my_form %} <div class="form-group" > #form.label可以显示每一个字段的 verbose_name值,没有设置的显示字段名 <label for="{{ form.pk }}">{{ form.label }}</label> {{ form }} <span class="error">{{ form.errors.0 }}</span> {# 这里传过来的数据 pop('数据')数据要用引号引起来,因为传过来的是参数#} <a class="add_new" onclick="pop('{{ foo.url }}')" style="position: absolute;top: 0;height: 0;"
href="">++</a> </div> {% endfor %}
4:在注册页面中
class Bookconfig(ModelStark): list_filter=['authors','publishs','state'] #当要显示字段中带choices属性的内容时 def state(self,obj=None,is_heard=False): if is_heard: return '编辑' #用obj.get_state_display()的方法可以显示每一条数据对象的(1,'已出版')中的已出版字段
return obj.get_state_display() list_display = ['title','price',state,'authors'] site.register(Book,Bookconfig) site.register(Author)



浙公网安备 33010602011771号