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