目前想要实现的功能是点击两个链接:在职人员、离职人员。改两个页面都使用同一个ListView进行查询。
初定在职人员的链接为
http://127.0.0.1/HRSystem/personlist/is_deleted-0
离职人员的链接为
http://127.0.0.1/HRSystem/personlist/is_deleted-1
is_deleted是model中是否删除的字段名。
如果按照以上链接,则可以定义urls.py:
urls.py
from HRSystem.views import PersonListView
from django.contrib.auth import views as auth_views,decorators
url(r'^personlist/([\w]+)-([\w]+)/$',
decorators.login_required(PersonListView.as_view(),login_url='HRSystem:login')
,name='personlist'),
以上使用了装饰器login_require,如果未登陆访问页面,则会跳转到登陆页面。
views.py
class PersonListView(generic.ListView):
template_name = 'HRSystem/personlist.html'
paginate_by = 40
def get_queryset(self,*args,**kwargs):
person_list = Person.objects.filter(is_deleted=self.args[1])
return person_list
def get_context_data(self,**kwargs):
context = super(PersonListView,self).get_context_data(**kwargs)
return context
此处值得注意的是,虽然is_deleted字段使用了BoonleanField,但是在URL访问时不可使用True/False替代0或1。
self.args[]获取了url中的参数。
如果不想通过args传递参数,则可以使用kwargs传递,但是url中要更改为:
url(r'^personlist/(?P<a>[\w]+)-(?P<b>[\w]+)/$',
decorators.login_required(PersonListView.as_view(),login_url='HRSystem:login')
,name='personlist'),
url中加入参数名a, b 那么在views的引用中就可以直接从参数名中用一下的方法获取
def get_queryset(self,*args,**kwargs):
person_list = Person.objects.filter(is_deleted=self.kwargs['b'])
return person_list