Skip to main content
 首页 » 编程设计

python之基于 Django 类的 View 在 session 中保留 url 参数

2024年12月31日25落叶无声

我有一个运行良好的 Django ListView 。

它接收url参数来过滤数据。 它是分页的。

现在,我想在用户 session 期间维护这些数据。 (页码和 url 参数)。

例子:

  • 我在产品 ListView 中。
  • 我搜索“foo”
  • 我选择第 2 页
  • 然后,我单击任何产品详细信息。
  • 页面将重定向到详细 View 。

当我返回产品 ListView 时,我想保留搜索参数“foo”和选定的第 2 页。

执行此操作的更好方法是什么?

我正在使用 Django 2.0.6

模型.py

class Product(models.Model): 
    name= models.CharField(_('name'), max_length=150) 
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.0) 

View .py

class ProductList(ListView): 
    model = Product 
    paginated_by = 10 
 
    def get_queryset(self): 
 
        queryset = Product.objects.all() 
 
        name = self.request.GET.get('name', None) 
        if name: 
            queryset = queryset.filter(name__icontains=name) 
 
        return queryset 

网址.py

path('products/', views.ProductList.as_view(), name='product_list'), 

请您参考如下方法:

为此,您必须将 URL 作为获取请求,以便您可以从 URL 获取获取值并在过滤器中使用它们来维护您的选择,例如:

url/?variable=value 

然后在您的 Django View 中,您可以通过 request.GET.get('variable') 访问它,并将其作为 HTML 呈现页面中的上下文传递,然后在您的过滤器选择中使用该变量.

在 session 中设置变量:

要在 session 中设置变量,您可以通过以下方式设置它:

request.session['variable'] = 'value'  

这个值可以通过以下方式检索:

if 'variable' in request.session: 
    variable1 = request.session['variable'] 

可以引用this docs .