如何将 url 中的变量传递给 Django 列表视图

Mat*_*ttG 3 python django django-views

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

我试过了:

视图.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])
Run Code Online (Sandbox Code Playgroud)

网址.py

path('<int:device>', DefaultsListView.as_view(), name='Default_Listview'),
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 8

你很接近,这self.kwargs是一个将字符串映射到从 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']
        )
Run Code Online (Sandbox Code Playgroud)

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']
        )
Run Code Online (Sandbox Code Playgroud)