簡體   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