为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-03-31 14:08:51
我有一个Django listview工作正常。它接收URL参数以过滤数据。它的分页。现在,我想在用户会话中维护这些数据。(页码和url参数)。例子:我在产品列表视图中。我搜索“ foo”我选择第2页然后,我单击任何产品详细信息。该页面将重定向到详细信息视图。返回产品列表视图时,我想保留搜索参数'foo'并选择页面2。有什么更好的方法来做到这一点?我正在使用Django 2.0.6型号class Product(models.Model):    name= models.CharField(_('name'), max_length=150)    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.0)Views.pyclass 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 querysetUrls.pypath('products/', views.ProductList.as_view(), name='product_list'),
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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


url/?variable=value

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


在会话中设置变量:


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


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

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


if 'variable' in request.session:

    variable1 = request.session['variable']

您可以参考此文档。


查看完整回答
反对 回复 2021-04-20
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我执行此操作的一个常见技巧是使用GET参数并直接将整个url保存在会话中(与分别保存每个参数相比,它节省了时间)


class ProductList(ListView):

    model = Product

    paginated_by = 10


    def get_queryset(self):


        self.request.session['saved_product_list_url'] = self.request.get_full_path()

        ....



然后,您可以在模板中像这样使用它:


<a href="{% if request.session.saved_product_list_url %}{{ request.session.saved_product_list_url }}{% else %}{% url 'product_list' %}{% endif %}">product list</a>

或在视图中这样:


saved_product_list_url = self.request.session.get('saved_product_list_url')

if saved_product_list_url:

    return redirect(saved_product_list_url)

else:

    return redirect('product_list')

同样在您的过滤器表单中,您应该添加“重置过滤器”,如下所示:


<a href="{% url 'product_list' %}">reset filters</a>


查看完整回答
反对 回复 2021-04-20
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信