Skip to main content
 首页 » 编程设计

python之如何将 url 中的变量传递给 Django ListView

2024年09月07日22lyj

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

我试过:

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'), 

请您参考如下方法:

你很接近,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<b>_id</b>=self.kwargs[<b>'device'</b>] 
        )

最好使用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)<b>.get_queryset()</b>.filter( 
            device_id=self.kwargs['device'] 
        )