我有一个运行良好的 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 .
关于python - 基于 Django 类的 View 在 session 中保留 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117132/