您的位置:首页 > 编程语言 > Go语言

初学django2-基于类的视图中获取URL参数

2016-01-04 19:16 666 查看
目前想要实现的功能是点击两个链接:在职人员、离职人员。改两个页面都使用同一个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中定义Personlist类(此处省略引用)
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: