【问题标题】:How to pass variable in url to Django List View如何将 url 中的变量传递给 Django 列表视图
【发布时间】:2019-03-23 02:14:28
【问题描述】:

我有一个 Django 通用列表视图,我想根据输入到 URL 中的值进行过滤。 例如,当有人输入 mysite.com/defaults/41 时,我希望视图过滤所有匹配 41 的值。 我遇到过几种使用基于函数的视图的方法,但不是基于类的 Django 视图。

我试过了:

views.py

class DefaultsListView(LoginRequiredMixin,ListView):
    model = models.DefaultDMLSProcessParams
    template_name = 'defaults_list.html'
    login_url = 'login'
    def get_queryset(self):
        return models.DefaultDMLSProcessParams.objects.filter(device=self.kwargs[device])

urls.py

path('<int:device>', DefaultsListView.as_view(), name='Default_Listview'),

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    你很接近,self.kwargs 是一个字典,它将 strings 映射到从 URL 中提取的相应值,所以你需要在这里使用包含 'device' 的字符串:

    class DefaultsListView(LoginRequiredMixin,ListView):
        model = models.DefaultDMLSProcessParams
        template_name = 'defaults_list.html'
        login_url = 'login'
    
        def get_queryset(self):
            return models.DefaultDMLSProcessParams.objects.filter(
                device_id=self.kwargs['device']
            )

    在此处使用devide_id 可能会更好,因为这样在语法上很清楚我们将标识符与标识符进行比较。

    进行super() 调用也可能更“惯用”,这样如果您稍后添加mixins,这些可以“预处理”get_queryset 调用:

    class DefaultsListView(LoginRequiredMixin,ListView):
        model = models.DefaultDMLSProcessParams
        template_name = 'defaults_list.html'
        login_url = 'login'
    
        def get_queryset(self):
            return super(DefaultsListView, self).get_queryset().filter(
                device_id=self.kwargs['device']
            )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 2015-09-12
      • 2016-03-26
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多