繁体   English   中英

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

[英]How to pass variable in url to Django List View

我有一个 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])

网址.py

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

你很接近, 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']
        )

在这里使用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']
        )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM