zoukankan      html  css  js  c++  java
  • stack组件03

    继昨天留下的问题

    思路:

    结果:

    优化:

    from stark.service.site import site,ModelSatrk
    
    from .models import *
    from django.utils.safestring import mark_safe
    from django.urls import reverse
    #
    class BookConfig(ModelSatrk):
    
        def edit(self,obj=None,is_header=False):
            if is_header:
                return "操作"
            edit_url=reverse("%s_%s_change"%self.app_model_name,args=(obj.pk,))
            return mark_safe("<a href='%s'>编辑</a>"%edit_url)
    
        # return 的url需要反向解析,需要取到name的值
    
    
        def delete(self,obj=None,is_header=False):
            if is_header:
                return "操作"
            # 如何反向解析url
            delete_url = reverse("%s_%s_change" % self.app_model_name, args=(obj.pk,))
            return mark_safe("<a href='%s'>删除</a>"%delete_url)
    
        list_display = ["id","title","price",edit,delete]  # z这个list_display只针对Book表
    # 自制注册功能(admin表的注册
    site.register(Book,BookConfig)
    stark.py

    在site模板提前取值

    from django.conf.urls import url
    from django.shortcuts import HttpResponse,render
    
    class ModelSatrk(object):  # 针对某张表的样式
        list_display=[]  # 提供给用户自己定制显示字段
        def __init__(self,model,site):
            # http://127.0.0.1:8000/stark/app01/book/
            self.model=model  # 获取是当前哪张表对应的样式类对象(用户访问当前类
            self.site=site  # 拿到一个全局的单例对象
            self.app_model_name=(self.model._meta.app_label,self.model._meta.model_name)
    View Code

    ------------------------

    这样第一种情况结束(用户自定义样式类)
     
    第二中:当用户没有定义样式类(我们需要提供一个默认样式类)
    会以__str__来当默认值
    admin是以这样的形式展示默认样式的:
     header_list.append(self.model._meta.model_name.upper())

     所以,接下来添加复选框

    ----

    当默认样式一定要有["id","title","price",] 这3个字段,怎么操作

    这3部分不需要用户去定制

    定义一个新的空列表

        def get_list_display(self):
            new_list_display=[]     #  [checkbox,"__str__",edit,delete]  将list_display里的str添加过去
            new_list_display.extend(self.list_display)  # self.list_display是一个列表,将一个列表添加进一个列表
            new_list_display.append(ModelSatrk.edit)
            new_list_display.append(ModelSatrk.delete)
            new_list_display.insert(0,ModelSatrk.checkbox)    # insert,第一个放位置
            return new_list_display  #  [checkbox,"__str__",edit,delete]

    展示数据信息和表头信息都用这个

  • 相关阅读:
    C#获取htmltry
    分页存储过程的写法 可以被调用
    验证邮箱地址是否正确的方法
    WinForm 异步调用方法
    C#基础复习第一部
    PowerDesigner12.5 下载、汉化及破解
    C# Timer用法及实例详解
    ADO.NET复习笔记
    C# 使用委托实现多线程调用窗体
    C#中存储过程的调用
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8570008.html
Copyright © 2011-2022 走看看