首页 文章

基于Django类的视图将url参数保留在会话中

提问于
浏览
1

我有一个django listview正常工作 .

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

现在,我想在用户会话中维护这些数据 . (页码和网址参数) .

例:

  • 我在产品列表视图中 .

  • 我搜索'foo'

  • 我选择了第2页

  • 然后,我点击任何产品细节 .

  • 页面将重定向到详细视图 .

当我返回产品列表视图时,我想保留搜索参数'foo'并选择第2页 .

有什么更好的方法呢?

我正在使用Django 2.0.6

Models.py

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

Views.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

Urls.py

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

1 回答

  • 0

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

    url/?variable=value
    

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

    Setting variable in session:

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

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

    并且可以通过以下方式检索此值:

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

    你可以参考this docs .

相关问题