ListView 如何获取参数

来源:6-2 完成动态列表页开发

李嘉图principal

2019-05-15

基础的view中可以在get方法中获取url传递的参数,需要向ListView中传递筛选参数应该怎么写呢?

写回答

3回答

1cho糖糖

2019-05-15

ListView最底层就是继承的View

写法和平时的类视图写法是一样的

from django.views.generic import ListView

# www.xxx.com/user?username="Zero"
class AListView(ListView):
    def get(self, request):
        username = request.GET.get('username')

emmm...不过本来ListView是帮我们用最简单的代码实现了列表展示分页等功能,如果想通过url中的参数来重新定义查询集的话在你的类视图就需要重写def get_queryset()方法,或者直接定义queryset,可以多看几次老师的6-3 LiseView源码详解,然后自己顺着走一下。

class NewsListView(LoginRequiredMixin, ListView):
    """首页动态"""
    template_name = "news/news_list.html"  # '模型类名_list.html'

    def get_queryset(self):
        user = self.request.GET.get('username')
        return Model_Name.objects.filter()




1
1
李嘉图principal
非常感谢!
2019-05-16
共1条回复

Jack

2019-05-15

就是@1cho糖糖同学说的,不过是使用 self.request.GET.get('xxx')  每个方法里面都能使用self.request. 这是对于www.xxx.com/user?username=zero传参的方式。

对于www.xxx.com/user/zero/,要获取到zero,

路由urls.py使用

path('user/<str:username>/', views.XXXView.as_view(), name='xxx'),

视图views.py中使用

self.kwargs['username']

1
0

李嘉图principal

提问者

2019-05-15

这样拿到的参数和listview中的其他方法如何关联?如果只是重写get方法还不如直接用基础的view,请指教?

0
0

Django高级实战 开发企业级问答网站

融合Django高级用法/算法/设计模式/TestCase测试/云计算打造项目

900 学习 · 756 问题

查看课程