• 组合筛选组件


    <div class="col-sm-3">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <i class="fa fa-search" aria-hidden="true"></i>筛选
                    </div>
                    <div class="panel-body filter-area">
                    {% for item in filter_list %}
                        <div class="item">
    
                            <div class="title">{{ item.title }}</div>
                            <div class="check-list"  style=" 100%">
                                {% for foo in item.filter %}
                                    {{ foo }}
                                {% endfor %}
                             </div>
    
                        </div>
                    {% endfor %}
    
                    </div>
                </div>
            </div>
    前端展示
    class checkboxFilter():
    
        def __init__(self,name,choices,request):
            self.request = request
            self.name = name
            self.choices = choices
    
        def __iter__(self):
            for item in self.choices:
                k = str(item[0])
                text = item[1]
    
                query_dict = self.request.GET.copy()
                query_dict._mutable = True
                value_list = self.request.GET.getlist(self.name) #获取当前筛选的选项,在生成url时把已选的值在列表中去掉
                ck = ""
                if k in value_list:
                    ck = "checked"
                    value_list.remove(k)
                else:
                    value_list.append(k)
                if "page" in query_dict:
                    query_dict.pop("page")
                query_dict.setlist(self.name,value_list)
                param_url = query_dict.urlencode()
                url = "{}?{}".format(self.request.path_info,param_url)
                tpl = "<a class='cell' href={url}><input type='checkbox' {ck} /> <lable>{text}</lable></a>"
                html = tpl.format(text=text,ck=ck,url=url)
                yield mark_safe(html)
    
    class selectFilter():
    
        def __init__(self,name,choices,request):
            self.request = request
            self.name = name
            self.choices = choices
    
        def __iter__(self):
            yield mark_safe("<select class='select2' multiple style='100%;' >")
            for item in self.choices:
                k = str(item[0])
                text = item[1]
    
                query_dict = self.request.GET.copy()
                query_dict._mutable = True
                value_list = self.request.GET.getlist(self.name) #获取当前筛选的选项,在生成url时把已选的值在列表中去掉
                ck = ""
                if k in value_list:
                    ck = "selected"
                    value_list.remove(k)
                else:
                    value_list.append(k)
    
                if "page" in query_dict:
                    query_dict.pop("page")
    
                query_dict.setlist(self.name,value_list)
                param_url = query_dict.urlencode()
                url = "{}?{}".format(self.request.path_info,param_url)
                tpl = "<option value={url} {ck}>{text} </option>"
                html = tpl.format(text=text,ck=ck,url=url)
                yield mark_safe(html)
            yield mark_safe("</select>")
    checkbox select筛选类
    def issues(request,project_id):
        if request.method=="GET":
            # 根据url筛选
            condition = {}
            allow_filter_list = ["status","priority","issue_type","pattern","assign","watcher"]
            for item in allow_filter_list:
                value_list = request.GET.getlist(item)
                if not value_list:
                    continue
                condition["{}__in".format(item)] = value_list
            queryset = models.Issues.objects.filter(project_id=project_id).filter(**condition)
            page_object = Pagination(
                current_page=request.GET.get('page'),
                all_count=queryset.count(),
                base_url=request.path_info,
                query_params=request.GET,
                per_page=5,
            )
            issues_object_list = queryset[page_object.start:page_object.end]
            form = issue.issuesForm(request)
            #邀请码表单验证
            invite_form = issue.inviteModelForm()
    
            issue_type_choices = models.IssueType.objects.filter(project_id=project_id).values_list("id","title")
            project_userlist = [(request.tracer.user.id,request.tracer.user.username)]
            projectUser = models.ProjectUser.objects.filter(project_id=project_id)
            project_userlist.extend(projectUser)
    
            context = {
                'issues_object_list': issues_object_list,
                'page_html': mark_safe(page_object.page_html()),
                "form": form,
                "invite_form": invite_form,
                "filter_list":[
                    {"title": "问题类型", "filter": checkboxFilter("issue_type", issue_type_choices, request)},
                    {"title":"问题状态","filter":checkboxFilter("status",models.Issues.status_choices,request)},
                    {"title":"优先级","filter":checkboxFilter("priority",models.Issues.priority_choices,request)},
                    {"title":"模式","filter":checkboxFilter("pattern",models.Issues.pattern_choices,request)},
                    {"title":"指派者","filter":selectFilter("assign",project_userlist,request)},
                    {"title":"关注者","filter":selectFilter("watcher",project_userlist,request)},
                ]
            }
    
            return render(request, "issues.html", context)
    视图函数
  • 相关阅读:
    洛谷P3811题解
    洛谷P3353在你窗外闪耀的星星-题解
    Map根据value来排序
    java8 groupby count
    Java反射
    maven profile环境切换
    获取nginx代理情况下的真实ip
    获取request里header的name和value
    git 删除iml文件
    java list 排序
  • 原文地址:https://www.cnblogs.com/hude/p/12822837.html
Copyright © 2020-2023  润新知