
<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>")

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)