[英]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.